統計信息自動執行需要以下條件滿足:
-
dba_autotask_task 字段status值 ENABLED
-
dba_autotask_client 字段status值 ENABLED
-
dba_autotask_window_clients 字段AUTOTASK_STATUS值 ENABLED OPTIMIZER_STATS值 ENABLED WINDOW_ACTIVE值 FALSE
- dba_scheduler_windows 字段ENABLED值TRUE 字段ACTIVE值FALSE 字段DURATION值大於10分鍾
-
dba_scheduler_jobs 字段ENABLED值 TRUE
總結一下統計信息自動收集任務運行的步驟:
首先是dba_autotask_task-->dba_autotask_client建立自動執行任務
再根據時間窗口及資源組建立自動執行作業
dba_autotask_client-->dba_scheduler_window_groups-->dba_scheduler_windows-->dba_scheduler_jobs
dba_autotask_client-->dba_scheduler_job_classes
1、統計信息執行總任務查看視圖dba_autotask_task

2、統計信息調用總過程查看視圖dba_scheduler_programs
3、統計信息執行狀態dba_autotask_client,可以通過如下進行修改,執行 DBMS_AUTO_TASK_ADMIN包,會更新dba_autotask_client的status字段和dba_autotask_window_clients的OPTIMIZER_STATS,SEGMENT_ADVISOR,SQL_TUNE_ADVISOR字段。
1 BEGIN 2 DBMS_AUTO_TASK_ADMIN.enable(client_name => 'auto optimizer stats collection', 3 operation => NULL, 4 window_name => 'MONDAY_WINDOW'); 5 END; 6 7 BEGIN 8 DBMS_AUTO_TASK_ADMIN.disable(client_name => 'auto optimizer stats collection', 9 operation => NULL, 10 window_name => NULL); 11 END;
4、如果執行DBMS_AUTO_TASK_ADMIN包不加參數,則更改dba_autotask_window_clients的AUTOTASK_STATUS字段
1 BEGIN 2 DBMS_AUTO_TASK_ADMIN.enable(); 3 END; 4 BEGIN 5 DBMS_AUTO_TASK_ADMIN.disable(); 6 END;
5、視圖dba_scheduler_windows是統計信息執行的各種細節屬性如(執行時間,執行時長等),可以通過如下進行設置
1 --設置開始時間 2 BEGIN 3 DBMS_SCHEDULER.SET_ATTRIBUTE(name => '"SYS"."WEDNESDAY_WINDOW"', 4 attribute => 'REPEAT_INTERVAL', 5 value => 'freq=daily;byday=WED;byhour=07;byminute=46;bysecond=0'); 6 END; 7 --設置執行時長,如果設置值小於10分鍾,統計信息貌似不能搜集 8 BEGIN 9 DBMS_SCHEDULER.SET_ATTRIBUTE(name => '"SYS"."WEDNESDAY_WINDOW"', 10 attribute => 'DURATION', 11 VALUE => '+000 00:20:00'); 12 END; 13 --禁用窗口,禁用后dba_autotask_window_clients視圖相關信息消失 14 BEGIN 15 dbms_scheduler.disable(name => 'WEDNESDAY_WINDOW', force => TRUE); 16 END; 17 --啟用窗口 18 BEGIN 19 dbms_scheduler.enable(name => 'WEDNESDAY_WINDOW'); 20 END; 21 --停止JOB 22 BEGIN 23 dbms_scheduler.stop_job('ORA$AUTOTASK_CLEAN'); 24 END; 25 --手動打開窗口 26 BEGIN 27 dbms_scheduler.open_window('WEDNESDAY_WINDOW'); 28 END; 29 --關閉窗口 30 BEGIN 31 dbms_scheduler.close_window('WEDNESDAY_WINDOW'); 32 END;
注:在窗口執行的過程中dba_scheduler_windows視圖ACTIVE字段是true狀態,dba_autotask_window_clients視圖WINDOW_ACTIVE字段也只true狀態
表統計信息收集標識:
一個表中被修改的行數超過stale_percent(缺省值10%)時就會認為這個表的統計數據過時了。oracle會監控所有表的DML活動並在SGA中進行記錄。監控的信息會定時的刷新到磁盤且可以通過*_tab_modifications視圖來查看。
也可以調用dbms_stats.flush_database_monitoring_info過程來手動刷新這些數據.如果想在查詢時得到最新信息(在所有統計數據收集之前內部監控數據會被刷新).可以通過查詢user_tab_statistics視圖中的stale_stats列來查看哪個表的統計數據過時了。 表的stale_stats被設置為NO,統計數據是最新的.表的stale_stats被設置為YES,統計數據是過時的.表的stale_stats沒有被設置說明丟失統計數據.