Oracle 10g中统计信息默认可以自动收集,由GATHER_STATS_JOB作业收集得到,只有当数据库对象没有统计信息或者统计信息已经过期(Oracle 10G中是否过期的标准是数据库对象被修改的记录行数超过10%,该信息由Modification Monitoring来追踪完成)时才对该对象进行信息统计,该作业在数据库创建或升级时由Scheduler自动创建,
这些作业可以从视图DBA_SCHEDULER_JOBS中查到。
SELECT * FROM DBA_SCHEDULER_JOBS
通过以下包设置job的开启与关闭
Begin
Dbms_scheduler.enable(‘GATHER_STATS_JOB’);
END;
Begin
Dbms_scheduler.disable(‘GATHER_STATS_JOB’);
END;
通过以下表查看job执行日志
Select * from dba_scheduler_job_run_details where job_name=’ GATHER_STATS_JOB’
默认情况下,Scheduler在维护窗口(maintenance window,目前227上默认启动时间为每晚上10:00至次日早上6:00及整个周六周日)打开时运行GATHER_STATS_JOB作业,作业GATHER_STATS_JOB则是通过调用系统内部过程DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC来完成信息统计的,该过程可根据数据库对象统计信息需求的优先级(即数据库对象被修改的多少)按先后顺序来完成统计信息收集任务。
可以通过以下表查看窗口信息
Select * from dbs_scheduler_windows
可以通过以下包修改窗口信息(例如将SUNDAY_WINDOW的开始时间修改为早上4点)
begin
dbms_scheduler.set_attribute
(
'SUNDAY_WINDOW','repeat_interval','freq=daily;byday=SUN;byhour=4;byminute=0; bysecond=0'
);
end;
Select * from dbs_scheduler_windows –查看是否修改成功
GATHER_STATS_JOB作业是否随维护窗口的关闭而关闭则由属性stop_on_window_close决定,stop_on_window_close的默认值为TRUE,此时GATHER_STATS_JOB作业随维护窗口的关闭而关闭。
可以通过以下匿名块查看stop_on_window_close属性
declare
value boolean;
begin
dbms_scheduler.get_attribute ('gather_stats_job','stop_on_window_close',value);
dbms_output.PUT_LINE('Check Result: '||case value when true then 'True' else 'False' end);
end;
可以通过以下包修改属性
exec dbms_scheduler.set_attribute(' gather_stats_job
','stop_on_window_close',TRUE);
非默认情况时,Oracle10g可通过设置初始化参数 STATISTIC_LEVEL(STATISTICS_LEVEL = {ALL | TYPICAL | BASIC}),来控制是否启用统计信息自动收集功能
当其为默认值TYPICAL时,系统将自动收集所有主要的有关自身管理的信息以使系统提供最优性能,该值适合于绝大多数情况;
当取值ALL时,相对TYPICAL值系统增加timed OS statistics和plan execution statistics两项信息统计;
当取值 BASIC时:有关系统特性和功能的许多信息统计功能都将被关闭
查看当前值
Show parameter statistics_level
修改语法
ALTER SESSION SET statistics_level=all –修改当前会话
ALTER SYSTEM SET statistics_level=all –修改整个系统