首页 > 其他 > 详细

10g 自动收集统计信息

时间:2014-12-31 02:18:53      阅读:296      评论:0      收藏:0      [点我收藏+]

从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。

这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。然而现在很多系统晚上10:00-6:00之间并非空闲,有的系统在跑
大量的报表,或者做备份,等等。而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。因此把自动收集统计关闭了。
有些初级点的DBA,没有关注这点,数据库自己不做收集统计了,他自己也
不做表收集了,从建完库后,数据库中的业务表就在也不做分析了。这样就造成了数据字典统计表中的信息与业务表中的真实信息相差甚远。
影响了数据库的执行计划。

首先介绍下自动收集的原理:
1.从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。

这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。这个自动任务默认情况下在工作日晚上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;


JOB_NAME                      LAST_START_DATE
------------------------------ ----------------------------------------
AUTO_SPACE_ADVISOR_JOB        04-DEC-07 10.00.00.692269 PM +08:00
GATHER_STATS_JOB              04-DEC-07 10.00.00.701152 PM +08:00
FGR$AUTOPURGE_JOB
PURGE_LOG                      05-DEC-07 03.00.00.169059 AM PRC


 

然而这个自动化功能已经影响了很多系统的正常运行,晚上10点对于大部分生产系统也并非空闲时段。
而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。

所以建议最好关闭这个自动统计信息收集功能:

exec DBMS_SCHEDULER.DISABLE(‘GATHER_STATS_JOB‘);

2.然而,我们开启自动收集又会影响夜间的业务运行。因此我们要根据自己系统实际的运行情况,自己制定收集计划。
我们可以采用dbms_stat包中过程自己自定收集计划。

有两种方法自动开启关闭自动收集功能,分别如下:方法一:
SYSDBA登录
exec dbms_scheduler.disable(‘SYS.GATHER_STATS_JOB‘);
exec dbms_scheduler.enable(‘SYS.GATHER_STATS_JOB‘);
方法二:
alter system set "_optimizer_autostats_job"=false scope=spfile;
alter system set "_optimizer_autostats_job"=true scope=spfile;

10g 自动收集统计信息

原文:http://blog.itpub.net/12798004/viewspace-1381067/

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!