Oracle 11g 的维修窗口时间段内,会自动收集为查询优化器使用的统计信息。
Automatic Optimizer Statistics Collection:
该维修窗口默认周一到周五,每天晚上10点执行,持续4小时;周六到周日,早上6点开始,持续20小时。
在维修窗口期间会造成业务系统的数据库查询操作和修改操所,全部阻塞挂起。
目前已统一将维修窗口时间段调整为每天凌晨3点,持续2小时;但因为业务系统24小时都有人使用,所以想进步一减少维修窗口期间数据阻塞对业务系统的影响,就有下面几个问题。请高手回答下!有如下几个问题:
1、为什么会阻塞,维修窗口干的上面事情会造成相关操作阻塞?
2、该数据统计信息任务关闭的话,对业务系统的性能有何影响?
3、如果不关闭数据统计信息任务,如何减少其对业务系统的影响?请Oracle高手指导,多谢!

解决方案 »

  1.   

    1、为什么会阻塞,维修窗口干的上面事情会造成相关操作阻塞?
    不会阻塞。表收集统计信息的时候 增删改查甚至加字段,删字段 都不会被阻塞。只是收集统计信息的时候比较占IO,所以一般都是配置数据库闲时跑维护任务。
    2、该数据统计信息任务关闭的话,对业务系统的性能有何影响?
    oracle 现在是CBO 优化器对sql进行优化,依靠收集的统计信息分析得出最优的执行计划。如果你把统计信息的维护任务关闭了,业务表的统计信息都是过时的不准确的,cbo得出的执行计划就不会是最优的。比如该走索引的,执行计划走成全表了,sql性能自然会受影响。
    3、如果不关闭数据统计信息任务,如何减少其对业务系统的影响?
    统计信息任务还是有必要打开的。调到业务闲事执行就好了。
      

  2.   

    如果应用系统没有统计信息的支持也跑的挺欢的,那么不收集统计信息也没什么,但,如果你之前一直开着收集统计信息的job,最好不要停了,因为随着数据的增长,原有的统计信息会越来越不符合实际情况,CBO生成高效执行计划的几率会变得越来越低,终有一天,你可能要遭遇由此带来的SQL性能突变,严重时可能会有整库性能问题,甚至宕机……这关不关会带来什么样的后果,其实是个概率问题,没有说开着一定好,或者说关了就一定不好的说法,有最新最详实的统计信息,CBO就更趋向生成高效的执行计划,但不代表它能让所有SQL的执行计划都变得更好(更差也有可能),至少没把握控制好执行频率很高的应用SQL的执行计划前,建议打开这个自动收集统计信息的job,有遇到即使使用系统自带job收集统计信息也无法得到合适执行计划的SQL,再做特殊处理——比如收集更加详细或者精确的统计信息,使用profile等手段固定执行计划等等。
      

  3.   

    http://blog.csdn.net/liuzhijian2008x/article/details/79267814
    卡的时候你参考我博客的监控下什么等待事件了。