Oracle如何监控表的DML次数

数据库技术大会上,做了《构建高可用数据库监控系统》的分享以后,很多朋友对北斗如何实现表的DML次数监控有兴趣,会上因为时间的原因,我只是说有系统视图可以查到这个信息,因此有了本文,可以稍微详细一点来说明是如何实现的。

我说的系统视图,具体指的是dba_tab_modifications/all_tab_modifications/user_tab_modifications,这几个视图收集了表自从上一次分析之后的DML累积次数。但是要注意,考虑到性能的影响,Oracle并不是实时统计这个数据的,在Oracle9i之前,约3个小时SMON进程会刷新一次数据,而Oracle9i以后这个时间间隔变成了15分钟。

因此以较高的频率来实时监控这个表的话,得到的并不是当前的准确数据。Oracle在dbms_stat包中提供了一个过程来手动刷新统计数据,假如在一天的业务低峰期采集一次数据的话,可以先执行该过程,就能得到较为准确的数据。但是,不建议在业务高峰期执行该过程。

exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

在Oracle10g之前,必须手工开启表的monitoring属性,才会将DML统计信息收集到这个视图中。可以通过dba_tables.monitoring列查看表是否已经开启了监控。关于这个变化,可以参考Metalink ID 252597.1

alter table test monitoring;

Oracle10g之后,只要statistics_level是TYPICAL(默认)或者ALL,就能自动收集信息了,即使给表设置为nomonitoring也不能阻止,这个表的属性已经被废弃了。

desc dba_tab_modifications
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_OWNER                                        VARCHAR2(30)
 TABLE_NAME                                         VARCHAR2(30)
 PARTITION_NAME                                     VARCHAR2(30)
 SUBPARTITION_NAME                                  VARCHAR2(30)
 INSERTS                                            NUMBER
 UPDATES                                            NUMBER
 DELETES                                            NUMBER
 TIMESTAMP                                          DATE
 TRUNCATED                                          VARCHAR2(3)
 DROP_SEGMENTS                                      NUMBER


无觅相关文章插件,快速提升流量

5条评论

  • At 2010.04.27 18:48, hoterran said:

    v$sql 算差值也可以得到时间范围内的dml语句~~~

    • At 2010.04.28 16:18, TQ said:

      “dba_tab_modifications/all_tab_modifications/dba_tab_modifications”
      最后一个改为user_tab_modifications吧。

      • At 2010.06.12 10:52, wisdomone1 said:

        大师,现在我们公司准备在linux(rhel4 or rhel5)上安装oracle10g(or oracle11g),

        我这块经验不足,根据稳定性与bug及少打patch的原则,

        1,在rhel4上安装oracle10g
        2,在rhel5上安装oracle11g
        3,在rhel4上安装oracle10g

        以上应优先哪一种呢?

        请大师帮指导下!

        实在经验少点,一般这种前期规划要从哪些方面去考虑啊?
        或者该去查哪些资料,一下子不知如何下手?

        • At 2010.06.12 16:12, NinGoo said:

          Oracle11g目前在某些环境下可能碰到一些bug。每个版本都会有一些bug,具体用哪个还需要结合硬件和应用环境考虑的,一般如果不是特别需要最新版本的某个特性,稍微老一些的版本可能更稳妥些。最好是能实际的做一次压力较大的稳定性测试。

        • At 2010.06.13 13:18, wisdomone1 said:

          谢谢大师!


          (Required)
          (Required, will not be published)