您好,欢迎访问一九零五行业门户网

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

从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的解决方法
本文永久更新链接地址:
其它类似信息

推荐信息