zoukankan      html  css  js  c++  java
  • Oracle 10g和11g中的自动统计任务

    1)  先来看下oracle 10g中的自动统计任务的问题。
    从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');


    2)oracle 11g的系统自动job
      
    SQL> select job_name,comments from dba_scheduler_jobs;


    3)10g关闭自动收集job
    select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'
    所以建议最好关闭自动统计信息收集功能:
    exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
    启动自动统计信息收集功能
    exec DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');

    手工收集统计信息:
    SQL> exec dbms_stats.gather_schema_stats('detail',options=>'gather stale',estimate_percent =>10);

    --收集没有分析过的表的统计信息
    begin
    dbms_stats.gather_schema_stats(ownname=>scott,options=>'gather empty');
    end;
    --重新分析修改量超过10%的表(这些修改包括插入、更新和删除)
    begin
    dbms_stats.gather_schema_stats(ownname=>scott,options=>'gather stale');
    end;

    4)11G关系自动收集job
       对于11g版本的oracle 有三个自动维护定时任务。
    1 自动优化器统计收集:为所有方案对象收集陈旧的或缺少的统计数据,所收集的统计信息将被用来提高sql的执行的性能,任务名是“auto optimizer stats collection”
    2 自动分段顾问:标识数据库中的段是否有可以回收的空间,并以此信息统计为基础做出怎样整理段的碎片以节约空间。你也可以手动的执行此job来获取最新的建议信息,或者获取自动段advisor 不检测的但又可以回收的段的信息,任务名是“auto space advisor”
    3 自动SQL调整顾问:自动标识并尝试调整高负载的SQL,任务名是“sql tuning advisor”
    sys@RAC> select client_name ,status from DBA_AUTOTASK_CLIENT;
    CLIENT_NAME                                                      STATUS
    ---------------------------------------------------------------- --------
    auto optimizer stats collection                                  ENABLED
    auto space advisor                                               ENABLED
    sql tuning advisor                                               ENABLED
    管理自动维护的job
    在oracle 10g中这些job被分别创建并且以DBA_SCHEDULER_JOBS.JOB_NAME的名称出现
    然而在11g中则有所改变,通过视图DBA_AUTOTASK_WINDOW_CLIENTS可以查看他们一周七天的执行情况,包括
    时间窗口,下次执行时间,job的名称,健康检查
    sys@RAC> select * from DBA_AUTOTASK_WINDOW_CLIENTS;
    WINDOW_NAME        WINDOW_NEXT_TIME                   WINDO AUTOTASK OPTIMIZE SEGMENT_ADVISOR SQL_TUNE HEALTH_M
    ------------------ ---------------------------------- ----- -------- -------- --------------- -------- --------
    WEDNESDAY_WINDOW   28-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED
    SATURDAY_WINDOW    01-OCT-11 06.00.00.000000 AM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED
    THURSDAY_WINDOW    29-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED
    TUESDAY_WINDOW     27-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED
    SUNDAY_WINDOW      02-OCT-11 06.00.00.000000 AM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED
    MONDAY_WINDOW      03-OCT-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED
    FRIDAY_WINDOW      30-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED
    7 rows selected.

    DBMS_AUTO_TASK_ADMIN包的ENABLE和DISABLE存储过程能够实现关闭或者开启的三种job(不要任何参数):
    execute DBMS_AUTO_TASK_ADMIN.DISABLE;
    execute DBMS_AUTO_TASK_ADMIN.ENABLE;


    关闭指定的job
    BEGIN
      dbms_auto_task_admin.disable(
      client_name => 'sql tuning advisor',
      peration => NULL,
      window_name => NULL);
    END; 
    /
    开启指定的job:
    BEGIN
      dbms_auto_task_admin.enable(
      client_name => 'sql tuning advisor',
      peration => NULL,
      window_name => NULL);
    END; 
    /
    关闭周三sql优化器顾问的执行窗口
    sys@RAC> BEGIN
      2         dbms_auto_task_admin.disable(
      3         client_name => 'sql tuning advisor',
      4         peration => NULL,
      5         window_name => 'MONDAY_WINDOW');
      6       END; 
      7      /
    PL/SQL procedure successfully completed.
    sys@RAC> select * from DBA_AUTOTASK_WINDOW_CLIENTS;

    WINDOW_NAME        WINDOW_NEXT_TIME                   WINDO AUTOTASK OPTIMIZE SEGMENT_ADVISOR      SQL_TUNE HEALTH_M
    ------------------ ---------------------------------- ----- -------- -------- -------------------- -------- --------
    WEDNESDAY_WINDOW   28-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    SATURDAY_WINDOW    01-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    THURSDAY_WINDOW    29-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    TUESDAY_WINDOW     27-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    SUNDAY_WINDOW      02-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    MONDAY_WINDOW      03-OCT-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              DISABLED DISABLED
    FRIDAY_WINDOW      30-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    7 rows selected.
    关闭星期天的自动段顾问job的时间窗口:
    sys@RAC> BEGIN
      2         dbms_auto_task_admin.disable(
      3         client_name => 'auto space advisor',
      4         peration => NULL,
      5         window_name => 'SUNDAY_WINDOW');
      6       END; 
      7      /
    PL/SQL procedure successfully completed.

    sys@RAC> select * from DBA_AUTOTASK_WINDOW_CLIENTS;

    WINDOW_NAME        WINDOW_NEXT_TIME                   WINDO AUTOTASK OPTIMIZE SEGMENT_ADVISOR      SQL_TUNE HEALTH_M
    ------------------ ---------------------------------- ----- -------- -------- -------------------- -------- --------
    WEDNESDAY_WINDOW   28-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    SATURDAY_WINDOW    01-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    THURSDAY_WINDOW    29-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    TUESDAY_WINDOW     27-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED
    SUNDAY_WINDOW      02-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  DISABLED             ENABLED  DISABLED
    MONDAY_WINDOW      03-OCT-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              DISABLED DISABLED
    FRIDAY_WINDOW      30-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED


    5) 11G关闭自动job
    SQL> select client_name,status from DBA_AUTOTASK_CLIENT;

    CLIENT_NAME                                                      STATUS
    ---------------------------------------------------------------- --------
    auto optimizer stats collection                                  ENABLED
    auto space advisor                                               ENABLED
    sql tuning advisor                                               ENABLED

    begin
    DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',
    operation => NULL,
    window_name => NULL);
    end;
    /
    PL/SQL procedure successfully completed.

    SQL>  select client_name,status from DBA_AUTOTASK_CLIENT;

    CLIENT_NAME                                                      STATUS
    ---------------------------------------------------------------- --------
    auto optimizer stats collection                                  DISABLED
    auto space advisor                                               ENABLED
    sql tuning advisor                                               ENABLED

  • 相关阅读:
    【SQL Server性能优化】SQL Server 2008之表压缩
    SQL Server 锁的排队机制
    通过DAC来连接SQL Server
    通过SQL Server的数据库邮件功能功能发送邮件
    【SQL 编程你也行】BOM按节点排序
    【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据
    《女孩梦三十》
    在论坛中出现的比较难的sql问题:26(动态行专列+合并字符串、补足行数)
    【SQL Server高可用性】数据库镜像:同一台机器的两个不同实例上配置数据库镜像 + 另一台见证服务器
    【SQL Server高可用性】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11198473.html
Copyright © 2011-2022 走看看