zoukankan      html  css  js  c++  java
  • Oracle自动统计信息的收集原理及实验

     

    [日期:2014-11-21]
    来源:Linux社区  作者:stevendbaguo
    [字体: ]

           从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。

            调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。收集的规则是user_tab_modifications中操作的记录数超过表的数量的10%就会自动收集。更多的信息看官方文档:http://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#sthref1068  。

          user_tab_modifications表中有inserts,updates,deletes,意思是修改了多少行数据,下面我们来做一个实验:

    SQL> create table test as select * from dba_objects;

    SQL> select table_name,inserts,updates,deletes,timestamp
          from user_tab_modifications where table_name='TEST';
    未选定行

    SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
    PL/SQL 过程已成功完成。

    SQL> select table_name,inserts,updates,deletes,timestamp
          from user_tab_modifications where table_name='TEST';
    未选定行

    SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
    PL/SQL 过程已成功完成。

    SQL> select table_name,inserts,updates,deletes,timestamp
          from user_tab_modifications where table_name='TEST';
    未选定行

    SQL> exec dbms_stats.gather_table_stats(user,'TEST');
    PL/SQL 过程已成功完成。

    SQL> select table_name,inserts,updates,deletes,timestamp
          from user_tab_modifications where table_name='TEST';
    未选定行

    SQL> delete from test where rownum <=10000;
    已删除10000行。
    SQL> commit;
    提交完成。

    SQL> select table_name,inserts,updates,deletes,timestamp
          from user_tab_modifications where table_name='TEST';
    未选定行

    SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
    PL/SQL 过程已成功完成。

    SQL> select table_name,inserts,updates,deletes,timestamp
          from user_tab_modifications where table_name='TEST';
    TABLE_NAME                        INSERTS    UPDATES    DELETES TIMESTAMP
    ------------------------------ ---------- ---------- ---------- --------------
    TEST                                    0          0    1000012-7月 -13

    另外:

        关闭自动统计信息命令,exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

        启用自动统计信息命令,exec DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');

        查看自动统计信息是否开启,

        oracle 10g :SELECT OWNER,JOB_NAME,ENABLED FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';
        oracle 11g :select t1.owner, t1.job_name, t1.enabled  from dba_scheduler_jobs t1  where t1.job_name = 'BSLN_MAINTAIN_STATS_JOB';

    Oracle 单实例 从32位 迁移到 64位 方法  http://www.linuxidc.com/Linux/2012-03/55759.htm

    CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htm

    Oracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htm

    Debian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm

    Oracle导入导出expdp IMPDP详解 http://www.linuxidc.com/Linux/2014-04/99932.htm

    Oracle 10g expdp导出报错ORA-4031的解决方法 http://www.linuxidc.com/Linux/2014-04/99842.htm

    更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

    本文永久更新链接地址http://www.linuxidc.com/Linux/2014-11/109690.htm

    linux

  • 相关阅读:
    wordpress调用函数大全
    Dedecms 数据库结构分析
    屏幕广播的实现(二)
    屏幕广播的实现(一)
    Alt+Ctrl+Del组合键的屏蔽
    关于钩子(HOOK)
    C# 线程入门 00
    C# 中 关键字 return break continue 详解
    Windows 网络命令
    vue自定义指令封装(加深印象)
  • 原文地址:https://www.cnblogs.com/snailwong/p/5904066.html
Copyright © 2011-2022 走看看