如何对Oracle统计信息进行收集和维护

来源:这里教程网 时间:2026-03-03 22:01:26 作者:

 11g   及以上   :

查看自动收集任务及状态:(11g及以上) 

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

  查看自动收集任务执行时间窗口: (11g及以上) 

1
2
3
select  WINDOW_NAME, WINDOW_NEXT_TIME, WINDOW_ACTIVE, OPTIMIZER_STATS 
   from  DBA_AUTOTASK_WINDOW_CLIENTS 
  order  by  WINDOW_NEXT_TIME;

  关闭自动收集任务:  

1
2
3
4
5
6
BEGIN 
       DBMS_AUTO_TASK_ADMIN.DISABLE( 
                      client_name =>  'auto optimizer stats collection'
                      operation =>  NULL , window_name =>  NULL ); 
   END
  /

  开启自动收集任务:  

1
2
3
4
5
6
BEGIN 
         DBMS_AUTO_TASK_ADMIN.ENABLE( 
                        client_name =>  'auto optimizer stats collection'
                        operation =>  NULL , window_name =>  NULL ); 
     END
     /

  10g:

查看自动收集任务及状态:

1
2
3
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' ;

  开启   /   关闭自动收集任务:

方法一:

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

  方法二:

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

  获得当前自动收集统计信息的执行时间

1
2
3
4
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    )

1
2
3
4
5
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 ;
/

 --   周末两天都是全天  :

1
2
3
4
5
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  运行历史记录

1
2
select  from  dba_scheduler_job_log
where   job_name =  'GATHER_STATS_JOB' ;

--   正在运行的  job

1
select  from  dba_scheduler_running_jobs;

相关推荐