注册
表的数据变化监控
专栏/知行者/ 文章详情 /

表的数据变化监控

一抹夏忧 2023/07/17 1960 9 0
摘要 MODIFICATIONS DBMS_STATS

数据变化监控

创建表,插入数据

create table test_modifications(id int);
begin
for i in 1..200000 loop
insert into test_modifications values(i);
end loop;
commit;
end;

对指定的表进行监控

alter system set 'MONITOR_MODIFICATIONS'=2 both; --MONITOR_MODIFICATIONS参数为2,对指定的表进行监控
--设置需要监控的表
DBMS_STATS.SET_TABLE_PREFS('SYSDBA','TEST_MODIFICATIONS','MONITOR_MODIFICATIONS_FLAG','TRUE');
--取消监控的表
DBMS_STATS.SET_TABLE_PREFS('SYSDBA','TEST_MODIFICATIONS','MONITOR_MODIFICATIONS_FLAG','FALSE');

设置用户表对象的数据变化情况记录到系统表的时间间隔

alter system set 'MON_CHECK_INTERVAL'=5 both;
设置5秒,即每过5秒数便将用户表对象的数据变化情况记录到SYSMODIFICATIONS系统表中 ,单位为秒,默认3600S一个小时。

设置对test_modifications表进行监控

插入

begin
for i in 1..200000 loop
insert into test_modifications values(i);
end loop;
commit;
end;

查询SYSMODIFICATIONS

image.png
Inserts:表示,监控打开以来,插入行数。
PART_INSERTS:表示,监控打开以来,受统计信息影响,插入的行数。

删除

1、select count() from test_modifications;
COUNT(
)
400000
2、delete from test_modifications ;
执行成功, 执行耗时1秒 139毫秒. 执行号:14965
影响了400,000条记录
Commit;
再次查询SYSMODIFICATIONS
image.png
此时在做一个统计信息的收集
DBMS_STATS.GATHER_TABLE_STATS(user,'TEST_MODIFICATIONS',NULL,100,FALSE,'FOR ALL COLUMNS SIZE AUTO',8);;
查询SYSMODIFICATIONS
image.png
发现PART_INSERTS记录的值已经被清空。

相关视图

视图all_tab_modifications、dba_tab_modifications、user_tab_modifications,用以展示上次收集统计信息以来表中的dml操作变化的数据量,包括insert、update、 delete影响的行数,是否执行过truncate操作,以及分区表删除子表的个数。
系统表:SYSMODIFICATIONS,用以记录所有用户表对象的数据变化情况。

相关系统存储过程

sp_flush_modifications_info:将监控信息刷新到系统表中。
SP_CLEAN_MODIFICATIONS:清理系统表SYSMODIFICATIONS中的冗余数据,将已经不存在的对象从该系统表中清除。
dbms_stats新增属性monitor_modifications_rm_pln_flag设置监控表移除计划缓存的数据变化阀值,监控表达到数据变化阈值,增加移除对象计划缓存处理。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服