Oracle 10g 之自動收集統計信息


  從10g開始,Oracle在建庫后就默認創建了一個名為GATHER_STATS_JOB的定時任務,用於自動收集CBO的統計信息。這個自動任務默認情況下在工作日晚上10:00-6:00和周末全天開啟。

1、查看自動收集統計信息的任務及狀態:

SQL> select job_name,schedule_name,enabled,last_start_date,last_run_duration,next_run_date  
  2  from dba_scheduler_jobs a
  3  where job_name = 'GATHER_STATS_JOB'

2、啟用/禁止自動收集統計信息的任務

方法一:
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;

3、獲得當前自動收集統計信息的執行時間

SQL> col WINDOW_NAME format a20
SQL> col DURATION format a20
SQL> col REPEAT_INTERVAL format a75
SQL> select t2.window_group_name,t1.window_name,t1.repeat_interval,t1.duration 
  2  from dba_scheduler_windows t1,dba_scheduler_wingroup_members t2
  3  where t1.window_name=t2.window_name;

WINDOW_GROUP_NAME              WINDOW_NAME          REPEAT_INTERVAL                                                             DURATION
------------------------------ -------------------- --------------------------------------------------------------------------- --------------------
MAINTENANCE_WINDOW_GROUP       WEEKNIGHT_WINDOW     freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0       +000 08:00:00
MAINTENANCE_WINDOW_GROUP       WEEKEND_WINDOW       freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0                         +002 00:00:00

SQL> 

4、修改統計信息執行的時間

--修改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;
/

5、查看統計信息執行的歷史記錄

--JOB運行歷史記錄
select * from dba_scheduler_job_log
where  job_name = 'GATHER_STATS_JOB'

--正在運行的job
select * from dba_scheduler_running_jobs

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM