关于统计信息的自动收集

本文介绍了如何调整Oracle数据库中GATHER_STATS_JOB的执行时间,包括修改窗口的打开时间及频率,通过DBMS_SCHEDULER.SET_ATTRIBUTE过程实现。适用于需要调整统计信息收集任务执行频度或时间的场景。
摘要由CSDN通过智能技术生成

10g开始,周一-周五晚上10点,周六的凌晨会进行统计信息的收集,以确保执行计划的正确性。
但是并不是所有的数据库都需要如此频繁的进行统计数据的收集,有时候我们可能需要修改这个job执行的频度或者执行的时间。
默认的执行时间可能正好和我们的应用高峰在相同时间,会对应用有所影响。
下面是修改GATHER_STATS_JOB的执行时间的大致步骤:

[@more@]

首先,我们可以看到这个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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值