10g开始,周一-周五晚上10点,周六的凌晨会进行统计信息的收集,以确保执行计划的正确性。
但是并不是所有的数据库都需要如此频繁的进行统计数据的收集,有时候我们可能需要修改这个job执行的频度或者执行的时间。
默认的执行时间可能正好和我们的应用高峰在相同时间,会对应用有所影响。
下面是修改GATHER_STATS_JOB的执行时间的大致步骤:
首先,我们可以看到这个scheduler_jobs的一些基本情况:
set linesize 400
col job_name for a24
col program_name for a24
col schedule_name for a24
col schedule_type for a12
col fc for 9
col stop_on_window_close for a5
col enabled for a5
select t.job_name,t.program_name,t.schedule_name,t.schedule_type,t.enabled,t.stop_on_window_close,t.failure_count fc,t.last_run_duration
from sys.dba_scheduler_jobs t
where job_name='GATHER_STATS_JOB';
JOB_NAME PROGRAM_NAME SCHEDULE_NAME SCHEDULE_TYP ENABL STOP_ FC LAST_RUN_DURATION
------------------------ ------------------------ ------------------------ ------------ ----- ----- -- ---------------------------------------------------------------------------
GATHER_STATS_JOB GATHER_STATS_PROG MAINTENANCE_WINDOW_GROUP WINDOW_GROUP TRUE TRUE 0 +000000000 00:28:32.513804
1 rows selected.
可以看到这个SCHEDULE使用的是MAINTENANCE_WINDOW_GROUP窗口组,当窗口关闭的时候会结束,失败次数为0,最后一次执行耗费的时间是28分钟。
然后我们可以看看这个窗口组对应的窗口信息:
SQL> select * from sys.dba_scheduler_wingroup_members t;
WINDOW_GROUP_NAME WINDOW_NAME
------------------------------ ------------------------------
MAINTENANCE_WINDOW_GROUP WEEKNIGHT_WINDOW
MAINTENANCE_WINDOW_GROUP WEEKEND_WINDOW
可以看到这个窗口组包括两个窗口,分别是每天执行的窗口和周末执行的窗口。
下一步我们查询每个窗口具体的信息:
set linesize 400
col window_name for a24
col repeat_interval for a70
col window_priority for a4
col enabled for a5
col active for a5
select t.window_name,t.window_priority,t.enabled,t.active,t.repeat_interval,t.duration
from sys.dba_scheduler_windows t;
WINDOW_NAME WIND ENABL ACTIV REPEAT_INTERVAL DURATION
------------------------ ---- ----- ----- ---------------------------------------------------------------------- ---------------------------------------------------------------------------
WEEKNIGHT_WINDOW LOW TRUE FALSE freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00
WEEKEND_WINDOW LOW TRUE FALSE freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0 +002 00:00:00
REPEAT_INTERVAL为窗口的打开时间和频率,DURATION为窗口打开的持续时间,enabled是窗口是否开放的标志,active则表示窗口当前是否正在开放。
如果要修改某个窗口的打开时间,需要使用DBMS_SCHEDULER.SET_ATTRIBUTE:
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name=>'SYS.WEEKEND_WINDOW',
attribute=>'REPEAT_INTERVAL',
value=>'FREQ=WEEKLY;BYDAY=MON;BYHOUR=3;BYMINUTE=0;BYSECOND=0');
END;
如果该窗口当前是活跃的,则需要先disable才能修改:
BEGIN
DBMS_SCHEDULER.DISABLE(
name=>'SYS.WEEKEND_WINDOW',
force=>TRUE);
END;
修改以后再enable:
BEGIN
DBMS_SCHEDULER.ENABLE(
name=>'SYS.WEEKEND_WINDOW');
END;
如果每周只想执行一次,则可以将两个窗口改到相同时间开启,相同时间只能开启一个窗口,所以一个窗口开启后另外一个不会再开启,也可以关闭一个窗口,只留一个窗口开启:
BEGIN
DBMS_SCHEDULER.DISABLE(
name=>'SYS.WEEKEND_WINDOW',
force=>TRUE);
END;
可以通过查看DBA_SCHEDULER_WINDOW_LOG监控窗口的打开、关闭和修改的情况。
可以通过查看dba_scheduler_job_log监控job的运行情况。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/51862/viewspace-1003478/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/51862/viewspace-1003478/