从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。
这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。
可以通过以下查询这个JOB的运行情况:
select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'
其实同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB:
SQL> select JOB_NAME,LAST_START_DATE from dba_scheduler_jobs where wner='SYS';
JOB_NAME LAST_START_DATE
------------------------------ --------------------------------------------------
PURGE_LOG 18-1月 -11 03.00.00.131783上午 US/PACIFIC
FGR$AUTOPURGE_JOB
GATHER_STATS_JOB 19-11月-09 11.53.03.333710 下午 +08:00
AUTO_SPACE_ADVISOR_JOB 18-1月 -11 10.00.01.349808 下午 +08:00
然而这个自动化功能已经影响了很多系统的正常运行,晚上10点对于大部分生产系统也并非空闲时段。而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。
所以建议最好关闭这个自动统计信息收集功能:
exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
自动化永远而严重的隐患相伴随!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9399028/viewspace-684228/ ,如需转载,请注明出处,否则将追究法律责任。