SELECT client_name, status
FROM dba_autotask_client
WHERE client_name = 'auto optimizer stats collection';
-- 11g 輸出
CLIENT_NAME STATUS
auto optimizer stats collection ENABLED
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/
-- 驗證
SELECT client_name, status FROM dba_autotask_client
WHERE client_name = 'auto optimizer stats collection';
-- STATUS = DISABLED
預設:週一至週五 22:00-02:00 (4小時),週六日全天。
範例:將週一窗口改為 **凌晨 02:00 開始,持續 5 小時**
BEGIN
DBMS_SCHEDULER.DISABLE(name => '"SYS"."MONDAY_WINDOW"', force => TRUE);
END;
/
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"SYS"."MONDAY_WINDOW"',
attribute => 'DURATION',
value => NUMTODSINTERVAL(300, 'MINUTE')); -- 5小時
END;
/
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"SYS"."MONDAY_WINDOW"',
attribute => 'REPEAT_INTERVAL',
value => 'FREQ=WEEKLY;BYDAY=MON;BYHOUR=2;BYMINUTE=0;BYSECOND=0');
END;
/
BEGIN
DBMS_SCHEDULER.ENABLE(name => '"SYS"."MONDAY_WINDOW"');
END;
/
-- 同理修改 TUESDAY_WINDOW ... SUNDAY_WINDOW
SELECT client_name, window_name, jobs_created, jobs_started, jobs_completed
FROM dba_autotask_client_history
WHERE client_name LIKE '%stats%';
-- 單表
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA', 'TABLE', CASCADE => TRUE);
-- 整個 Schema
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA', CASCADE => TRUE);
-- 全庫 (慎用)
EXEC DBMS_STATS.GATHER_DATABASE_STATS(CASCADE => TRUE);
| 場景 | 建議 |
|---|---|
| 大多數系統 | 保持預設自動收集,僅調整窗口避開高峰 |
| 極大表/分區表 | 自定義作業,採用 INCREMENTAL、GRANULARITY=>'PARTITION' |
| 高頻 DML 表 | 鎖定統計信息 (LOCK_TABLE_STATS) + 定時手動刷新 |
| 升級/遷移後 | 全庫手動收集一次,建立基線 |