状况,昨晚10点有发生前天性能问题,又重新收集了一下就好了,这个时间点就可以定位到是oracle自带的job收集统计信息是有问题的
oracle的自动信息收集功能是通过一个叫GATHER_STATS_JOB的任务来完成的,该任务调用过程dbms_stats.gather_database_stats_job_proc执行信息收集,它会检测哪些对象没有统计信息或者统计信息比较陈旧,将优先对这些对象进行分析。而我们平时手工用的dbms_stats.gather_database_stats,是没有分优先级的,也就是它将对数据里的所有对象进行分析,不管该对象有没有被分析过。GATHER_STATS_JOB任务一般是安排在晚上10pm-6am,周未全天启动。
SELECT OWNER,
JOB_NAME,
to_char(last_start_date, 'yyyy-mm-dd hh24:mi:ss') last_start_date,
to_char(next_run_date, 'yyyy-mm-dd hh24:mi:ss') next_run_date,
PROGRAM_NAME,
JOB_TYPE,
JOB_ACTION
FROM DBA_SCHEDULER_JOBS;
GATHER_STATS_JOB 就是这个东西
开关此Job
exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
exec DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');
oracle的自动信息收集功能是通过一个叫GATHER_STATS_JOB的任务来完成的,该任务调用过程dbms_stats.gather_database_stats_job_proc执行信息收集,它会检测哪些对象没有统计信息或者统计信息比较陈旧,将优先对这些对象进行分析。而我们平时手工用的dbms_stats.gather_database_stats,是没有分优先级的,也就是它将对数据里的所有对象进行分析,不管该对象有没有被分析过。GATHER_STATS_JOB任务一般是安排在晚上10pm-6am,周未全天启动。
我所知道的大部分的正式库都是将此job关闭的,然后再在以后的工作中有需要的时候逐个手动收集。
还有就是,如果要在正式库上收集统计信息的时候一定要选择系统压力小的时候,因为收集统计信息本身就是一件很
消耗资源的事情
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10678398/viewspace-715521/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10678398/viewspace-715521/