Oracle 11g 自动收集统计信息导致 IO 过高优化方案
Oracle 11g 默认开启了自动统计信息收集任务(Auto Stats Collection),这虽然能保持优化器数据的准确性,但在业务高峰期往往会造成显著的 I/O 压力。如果监控发现数据库在特定时段出现 IO 飙升,我们通常可以根据实际情况调整任务的执行时间、持续时间,或者直接暂停相关窗口。
调整维护窗口配置
我们可以通过 DBMS_SCHEDULER 包来修改系统维护窗口的行为。以下操作演示了如何禁用特定窗口、调整执行时长以及设定新的开始时间。
1. 停止当前任务
首先,我们需要暂时禁用默认的维护窗口,防止它在原定时间触发。
BEGIN
DBMS_SCHEDULER.DISABLE(
name => '"SYS"."FRIDAY_WINDOW"',
force => TRUE);
END;
/
2. 修改任务持续时间
为了避免长时间占用资源,建议限制统计收集的最大运行时间。这里设置为 240 分钟(单位是分钟)。
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"SYS"."FRIDAY_WINDOW"',
attribute => 'DURATION',
value => numtodsinterval(240, 'minute'));
END;
/
3. 调整任务开始时间
将任务迁移到业务低峰期,例如周一凌晨 1 点。注意这里的 REPEAT_INTERVAL 格式。
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"SYS"."FRIDAY_WINDOW"',
attribute => 'REPEAT_INTERVAL',
value => 'FREQ=WEEKLY;BYDAY=MON;BYHOUR=1;BYMINUTE=0;BYSECOND=0');
;

