Oracle 統計資訊介紹

空白葛發表於2019-07-29
 
統計資訊自動執行需要以下條件滿足:
  1. dba_autotask_task 欄位status值ENABLED
  2. dba_autotask_client 欄位status值ENABLED
  3. dba_autotask_window_clients 欄位AUTOTASK_STATUS值ENABLED OPTIMIZER_STATS值ENABLED WINDOW_ACTIVE值FALSE
  4. dba_scheduler_windows 欄位ENABLED值TRUE 欄位ACTIVE值FALSE 欄位DURATION值大於10分鐘
  5. 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沒有被設定說明丟失統計資料.

 

 

 

相關文章