Oracle管理 | 統計資訊影響資料庫執行
阿新 • • 發佈:2021-01-24
某次開發反饋資料庫在每週六的早上都執行很慢,若干寫資料任務受影響。
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;