IT技术博客大学习 共学习 共进步

Oracle如何监控表的DML次数

NinGoo.net 2010-04-27 23:33:10 浏览 4,021 次

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

我说的系统视图,具体指的是dba_tab_modifications/all_tab_modifications/dba_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

建议继续学习

  1. Mysql监控指南 (阅读 21,104)
  2. 批量添加主机到cacti+nagios的监控报警系统中 (阅读 14,684)
  3. 我常用的主机监控shell脚本 (阅读 13,105)
  4. 7 天打造前端性能监控系统 (阅读 11,063)
  5. 如何监控HP服务器硬件状态 (阅读 10,506)
  6. Cacti 添加 Nginx 监控 (阅读 10,363)
  7. Linux下三种常用的流量监控软件对比 (阅读 9,986)
  8. Cacti 添加 Memcached 监控 (阅读 9,163)
  9. Cacti 添加 Apache 监控 (阅读 8,984)
  10. 你应该知道的16个Linux服务器监控命令 (阅读 8,409)