tft每日頭條

 > 圖文

 > oracle執行計劃怎麼解析

oracle執行計劃怎麼解析

圖文 更新时间:2025-01-03 04:13:01
概述

Oracle數據庫自己會例行做一些定時任務,比如會自動進行統計信息收集等作業任務。如果統計信息收集的時間正好趕上業務的高峰期,那就有可能由此引發一系列性能故障。

那麼,我們該如何查看這些數據庫自動去做的任務執行計劃和執行情況呢?

  • 1.計劃窗口調整
  • 2.自動任務調整
  • 3.任務執行情況

1.計劃窗口調整

1.1、查詢窗口定義

通過查詢dba_scheduler_windows,可以看到有關窗口的定義詳情。

col window_name for a30 col REPEAT_INTERVAL for a60 set lines 1000 select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;

oracle執行計劃怎麼解析(一文看懂如何合理設置Oracle計劃窗口和自動任務)1

在11g之後,oracle将之前隻區分工作日和休息日的分類,細化到一周中的每一天。而且默認值的收集時間也比10g有大幅度的減少。

1.2、修改窗口啟動時間和duration

默認是周一到周五每晚10點開始收集統計信息,duration是4h;周六周日早上6點開始收集統計信息,duration是20h

--修改窗口啟動時間:周六改為22點 EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW','repeat_interval','freq=daily;byday=MON;byhour=22;byminute=0;bysecond=0'); EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('TUESDAY_WINDOW','repeat_interval','freq=daily;byday=TUE;byhour=22;byminute=0;bysecond=0'); EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('WEDNESDAY_WINDOW','repeat_interval','freq=daily;byday=WED;byhour=22;byminute=0;bysecond=0'); EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('THURSDAY_WINDOW','repeat_interval','freq=daily;byday=THU;byhour=22;byminute=0;bysecond=0'); EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('FRIDAY_WINDOW','repeat_interval','freq=daily;byday=FRI;byhour=22;byminute=0;bysecond=0'); EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW','repeat_interval','freq=daily;byday=SAT;byhour=22;byminute=0;bysecond=0'); EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW','repeat_interval','freq=daily;byday=SUN;byhour=6;byminute=0;bysecond=0'); --修改窗口duration:在 exec dbms_scheduler.set_attribute('MONDAY_WINDOW','duration',numtodsinterval(240,'minute')); exec dbms_scheduler.set_attribute('TUESDAY_WINDOW','duration',numtodsinterval(240,'minute')); exec dbms_scheduler.set_attribute('WEDNESDAY_WINDOW','duration',numtodsinterval(240,'minute')); exec dbms_scheduler.set_attribute('THURSDAY_WINDOW','duration',numtodsinterval(240,'minute')); exec dbms_scheduler.set_attribute('FRIDAY_WINDOW','duration',numtodsinterval(240,'minute')); exec dbms_scheduler.set_attribute('SATURDAY_WINDOW','duration',numtodsinterval(240,'minute')); exec dbms_scheduler.set_attribute('SUNDAY_WINDOW','duration',numtodsinterval(1200,'minute'));

oracle執行計劃怎麼解析(一文看懂如何合理設置Oracle計劃窗口和自動任務)2

2、自動任務調整

10g版本沒有這些自動維護任務,以下都是以11g以上版本為例,主要介紹如何關閉/啟用自動任務(默認是關閉的。)。

2.1、查詢

select client_name,status from dba_autotask_client;

oracle執行計劃怎麼解析(一文看懂如何合理設置Oracle計劃窗口和自動任務)3

2.2、關閉自動維護任務

--關閉sql tuning advisor,避免消耗過多的資源 BEGIN DBMS_AUTO_TASK_ADMIN.disable( client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); END; / --關閉auto space advisor,避免消耗過多的IO,還有避免出現這個任務引起的library cache lock BEGIN DBMS_AUTO_TASK_ADMIN.disable( client_name => 'auto space advisor', operation => NULL, window_name => NULL); END; / --關閉自動統計信息收集,(慎用,除非有其他手工收集統計信息的完整方案,否則不建議關閉) BEGIN DBMS_AUTO_TASK_ADMIN.disable( client_name => 'auto optimizer stats collection', operation => NULL, window_name => NULL); END; /

oracle執行計劃怎麼解析(一文看懂如何合理設置Oracle計劃窗口和自動任務)4

2.3、啟動自動維護任務

--啟動sql tuning advisor BEGIN DBMS_AUTO_TASK_ADMIN.enable( client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); END; / --啟動auto space advisor BEGIN DBMS_AUTO_TASK_ADMIN.enable( client_name => 'auto space advisor', operation => NULL, window_name => NULL); END; / --啟動自動統計信息收集 BEGIN DBMS_AUTO_TASK_ADMIN.enable( client_name => 'auto optimizer stats collection', operation => NULL, window_name => NULL); END; /


3、任務執行情況

這裡主要查詢這個視圖:dba_scheduler_job_run_details

select owner, job_name, status, ACTUAL_START_DATE, RUN_DURATION from dba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT_S%' order by 4;

oracle執行計劃怎麼解析(一文看懂如何合理設置Oracle計劃窗口和自動任務)5

可以看到統計信息收集的JOB_NAME在11g版本之後不再是固定的一個名字,而是以ORA$AT_OS_OPT_SY開頭的命名。


後面會分享更多devops和DBA方面的内容,感興趣的朋友可以關注下~

oracle執行計劃怎麼解析(一文看懂如何合理設置Oracle計劃窗口和自動任務)6

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved