Oracle修改统计信息收集计划时间
一、查询收集统计信息计划
select * 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','BSLN_MAINTAIN_STATS_SCHED');
或
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','BSLN_MAINTAIN_STATS_SCHED');
以下是默认是统计信息收集时间
二、修改集统计信息计划的开始时间
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name=>'"SYS"."TUESDAY_WINDOW"',
attribute=>'REPEAT_INTERVAL',
value=>'freq=daily;byday=TUE;byhour=9;byminute=0; bysecond=0');
END;
三、修改收集统计信息计划的持续时间
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name=>'"SYS"."TUESDAY_WINDOW"',
attribute=>'DURATION',
value=>numtodsinterval(1200, 'minute'));
END;
numtodsinterval中也可以用 小时hour为单位
关闭单个调度窗口
BEGIN DBMS_AUTO_TASK_ADMIN.disable(client_name => 'auto optimizer stats collection', operation => NULL, window_name => 'MONDAY_WINDOW'); END;
开启单个调度窗口
BEGIN
DBMS_AUTO_TASK_ADMIN.enable(client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => 'MONDAY_WINDOW');
END;
关闭所有时间调度窗口
BEGIN
DBMS_AUTO_TASK_ADMIN.disable (
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/
然而我们在生产中会经常发现,自动收集统计信息会漏掉很多表,我们就需要用到手动收集统计信息、创建计划任务自动执行
四、查询表的统计信息,手动收集统计信息
在Oracle中,存在执行计划不准的情况,怀疑表的统计信息是否收集,需要以下操作:
select table_name,num_rows,blocks,last_analyzed from user_tables where table_name='EMP';
说明:
-- table_name:展示表名 --num_rows:最后一次统计时的行数 --blocks:非当前块数,最后一次统计时的块数 --last_analyzed :最后一次统计的时间
--上述字段为null说明未统计
手动收集统计信息,并再次查看:
exec dbms_stats.gather_table_stats(ownname=>'META',tabname=>'EMP',estimate_percent=>10,method_opt=>'for all indexed columns');