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

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

59266235_1.gif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值