Oracle如何查询表的DML操作数据变化量

0    160    1

Tags:

👉 本文共约1050个字,系统预计阅读时间或需4分钟。

简介

DBA_TAB_MODIFICATIONS视图(基表为SYS.MON_MODS_ALL$)记录了从上次收集统计信息以来表中DML操作变化的数据量,包括执行INSERT、UPDATE和DELETE影响的行数,以及是否执行过TRUNCATE操作。另外,DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO可以将内存(SGA)中的数据快速刷新到数据字典SYS.MON_MODS_ALL$中。

其实,SYS.MON_MODS_ALL$只是最终表,中间还有一个过渡表SYS.MON_MODS$,这两个表的结构是完全相同的。从Oracle 10g开始,当初始化参数STATISTICS_LEVEL的值被设置为TYPICAL或ALL时,默认会启用Oracle中表监控的特性,此时,Oracle会默认监控表上的自上一次分析(Last Analyzed)之后发生的INSERT、UPDATE、DELETE以及表是否被TRUNCATE截断操作,并且Oracle数据库的SMON后台进程每15分钟会将这些操作数量的近似值(内存SGA中记录的DML操作)写入到数据字典基表MON_MODS$中(从SGA中写入到MON_MOD$),但是这个写入过程只持续1分钟,因此,可能不是所有DML操作都会记录到MON_MODS$表中。在默认情况下,数据库每天会将SGA中表的DML操作和MON_MODS$表的数据合并(MERGE)到MON_MODS_ALL$中,也可以通过DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO来手动写入到MON_MODS_ALL$中。在收集统计信息后,MON_MODS_ALL$表中信息将被清空。需要注意的是,在作者实际测试过程中发现,Oracle并不是严格按照每15分钟将SGA中的DML刷新到MON_MODS$表中,而且也不是严格按照每天1次的规律刷新MON_MODS$表的数据到MON_MODS_ALL$中。所以,DBA只需要知道,DML数据是SMON进程从SGA中刷新到SYS.MON_MODS$中,然后按照一定的时间规则刷新到SYS.MON_MODS_ALL$表中即可。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Oracle如何查询表的DML操作数据变化量后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部