統計資訊自動執行需要以下條件滿足:
-
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沒有被設定說明丟失統計資料.