Oracle統計資訊的收集和維護

a960549548發表於2024-03-06

GATHER_STATS_JOB 自動統計資訊收集

物件之前從未收集過統計資訊,或由於某些原因沒有統計資訊

物件的統計資訊相對陳舊 (stale)

收集週期:

工作日: 22 點開始,持續 4 小時

週末: 6 點開始,持續 20 小時

11g 及以上 :

檢視自動收集任務及狀態:(11g及以上)

select client_name,status from Dba_Autotask_Client where client_name='auto optimizer stats collection';


檢視自動收集任務執行時間視窗:(11g及以上)

select WINDOW_NAME, WINDOW_NEXT_TIME, WINDOW_ACTIVE, OPTIMIZER_STATS 
  from DBA_AUTOTASK_WINDOW_CLIENTS 
 order by WINDOW_NEXT_TIME;

關閉自動收集任務:

BEGIN 
      DBMS_AUTO_TASK_ADMIN.DISABLE( 
                     client_name => 'auto optimizer stats collection', 
                     operation => NULL, window_name => NULL); 
  END; 
 /

開啟自動收集任務:

BEGIN 
        DBMS_AUTO_TASK_ADMIN.ENABLE( 
                       client_name => 'auto optimizer stats collection', 
                       operation => NULL, window_name => NULL); 
    END; 
    /

10g:

檢視自動收集任務及狀態:

select job_name,schedule_name,enabled,last_start_date,last_run_duration,next_run_date
from dba_scheduler_jobs a
where job_name = 'GATHER_STATS_JOB';

開啟 / 關閉自動收集任務:

方法一:

exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');
exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');

方法二:

alter system set "_optimizer_autostats_job"=false scope=spfile;
alter system set "_optimizer_autostats_job"=true scope=spfile;

獲得當前自動收集統計資訊的執行時間

col WINDOW_NAME format a20
col DURATION format a20
col REPEAT_INTERVAL format a75
select t2.window_group_name,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;

修改統計資訊執行的時間

-- 修改 WEEKEND_WINDOW 的配置 ( 改成和 WEEKNIGHT_WINDOW 相同 , 即週一 ~ 週五 , 每日的 22:00 向後 8 小時 , 至次日凌晨 6 )

begin
dbms_scheduler.set_attribute('WEEKEND_WINDOW','REPEAT_INTERVAL','freq=daily;byday=SAT,SUN;byhour=22;byminute=0;bysecond=0');
dbms_scheduler.set_attribute('WEEKEND_WINDOW','DURATION','+000 08:00:00');
end;
/

-- 若要還原成以前預設設定 , 可執行如下

-- 週末兩天都是全天 :

begin
dbms_scheduler.set_attribute('WEEKEND_WINDOW','REPEAT_INTERVAL','freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0');
dbms_scheduler.set_attribute('WEEKEND_WINDOW','DURATION','+002 00:00:00');
end;
/

檢視統計資訊執行的歷史記錄

--JOB 執行歷史記錄

select * from dba_scheduler_job_log
where  job_name = 'GATHER_STATS_JOB';


-- 正在執行的 job

select * from dba_scheduler_running_jobs;



來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70013625/viewspace-3008215/,如需轉載,請註明出處,否則將追究法律責任。

相關文章