Home >Database >Mysql Tutorial >Oracle自动统计信息的收集原理及实验

Oracle自动统计信息的收集原理及实验

WBOY
WBOYOriginal
2016-06-07 16:45:571025browse

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

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

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

      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行。
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位 方法 

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

Oracle导入导出expdp IMPDP详解

Oracle 10g expdp导出报错ORA-4031的解决方法

本文永久更新链接地址:

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:PL/SQL流程控制语句Next article:ORA-08102 错误解决