zoukankan      html  css  js  c++  java
  • ORACLE10g自动收集统计信息自动analyze

    从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;

    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');

    自动化永远而严重的隐患相伴随!


    以上是转载盖国强的看法----http://www.eygle.com/archives/2007/12/dbms_scherduler_disable.html
    我的DB一直没有关闭这个功能,而且使用的很好,暂时不打算关闭,如果那天确实影响了使用,再决定是否关闭。
    关闭及开启自动搜集功能,有两种方法,分别如下:
    方法一: 
    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;

    Pfile可以直接修改初始化参数文件,重新启动数据库。

  • 相关阅读:
    C#处理不同的JSON数据
    如何查看当前工程,已经安装的nuget包?
    什么是nuget?nuget包是如何管理
    Visual Studio 2015创建ASP.NET MVC流程
    Web API和Web Service
    TCP和IP的三次握手和第四次挥手
    http和https的区别
    HTTP协议详细介绍
    MVC流程图
    简述 三次握手、四次挥手的流程?
  • 原文地址:https://www.cnblogs.com/kevinsun/p/1212584.html
Copyright © 2011-2022 走看看