1. 程式人生 > 其它 >Oracle管理 | 統計資訊影響資料庫執行

Oracle管理 | 統計資訊影響資料庫執行

技術標籤:資料庫ORACLEoracle

某次開發反饋資料庫在每週六的早上都執行很慢,若干寫資料任務受影響。

1.檢視當前系統預設的執行計劃情況:

SELECT T1.WINDOW_NAME, T1.REPEAT_INTERVAL, T1.DURATION
  FROM DBA_SCHEDULER_WINDOWS T1, DBA_SCHEDULER_WINGROUP_MEMBERS T2
 WHERE T1.WINDOW_NAME = T2.WINDOW_NAME
   AND T2.WINDOW_GROUP_NAME IN ('MAINTENANCE_WINDOW_GROUP')

在這裡插入圖片描述

可以看到,平時的任務是22點啟動,持續4小時(超過4小時未執行完則斷掉)
週末6點啟動,持續20小時

2.檢視週末已經分析的表(當前時間12點),會發現即使任務是6點開始,但是每天實際分析完的表很少,所以週末這個6點鐘啟動的統計任務實質上沒有發揮什麼作用,反而影響資料寫入效能。

SELECT * from dba_tables d WHERE d.last_analyzed >=trunc(SYSDATE)

3.修改自動收集統計資訊時間,讓週末和平時保持一致
方法一:用set_attribute修改視窗屬性

BEGIN
  --1)禁用原來的視窗
  DBMS_SCHEDULER.
DISABLE(NAME => 'SUNDAY_WINDOW'); --2)用set_attribute修改repeat_interval屬性和duration屬性 DBMS_SCHEDULER.SET_ATTRIBUTE(NAME => 'SUNDAY_WINDOW', ATTRIBUTE => 'REPEAT_INTERVAL', VALUE => 'freq=daily;byday=SAT;byhour=22;byminute=0; bysecond=0'
); DBMS_SCHEDULER.SET_ATTRIBUTE(NAME => 'SUNDAY_WINDOW', ATTRIBUTE => 'DURATION', VALUE => NUMTODSINTERVAL(6, 'hour')); --3)啟用原來的視窗 DBMS_SCHEDULER.ENABLE(NAME => 'SUNDAY_WINDOW'); END;

對於當前的視窗需要先禁用再啟用才能生效,否則要到下一次視窗開啟的時候才能生效

方法二:先建立新視窗,再刪除舊視窗
1)新建視窗

BEGIN
  DBMS_SCHEDULER.CREATE_WINDOW(WINDOW_NAME     => 'WEEKENDS_WINDOW',
                               RESOURCE_PLAN   => 'DEFAULT_MAINTENANCE_PLAN',
                               DURATION        => NUMTODSINTERVAL(1, 'hour'),
                               REPEAT_INTERVAL => 'freq=daily;byday=SAT;byhour=22;byminute=0; bysecond=0');
  ---記得在MAINTENANCE_WINDOW_GROUP組中新增新建的window_group_member
  DBMS_SCHEDULER.ADD_WINDOW_GROUP_MEMBER(GROUP_NAME  => 'MAINTENANCE_WINDOW_GROUP',
                                         WINDOW_LIST => 'WEEKENDS_WINDOW');
END;

2)刪除舊的視窗
(這裡只是在DBA_SCHEDULER_WINGROUP_MEMBERS中刪除)

BEGIN
  DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER(GROUP_NAME  => 'MAINTENANCE_WINDOW_GROUP',
                                            WINDOW_LIST => 'SUNDAY_WINDOW');
END;