某系统1月30日13:31后归档量爆发式增长,从每日50G左右增长至每小时170G,IO负载由8%左右增长至90%以上,1月31日凌晨2点数据库备份任务启动,进一步拉高IO负载,致使存储IO达到性能瓶颈
通过日志挖掘分析引起归档激增的原因
select para_name,para_value from v$dm_ini where para_name in (‘ARCH_INI’,‘RLOG_APPEND_LOGIC’);
注:RLOG_APPEND_LOGIC 需要设置为 1 或 2;1 代表如果有主键列,记录 UPDATE 和 DELETE 操作时只包含主键列信息,若没有主键列则包含所有列信息;2 代表不论是否有主键列,记录 UPDATE 和 DELETE 操作时都包含所有列的信息。
注意事项:
不建议在生产环境直接进行归档日志分析,建议拷贝到测试环境进行操作;
测试库需要开启归档日志功能。
select permanent_magic,db_magic;
执行以下命令,通过dmmdf工具修改归档日志的db_magic
./dmmdf TYPE=2 FILE=/dbarch/dmarch/ARCHIVE_LOCAL1_0x2EACED66_EP0_2026-03-19_14-13-40.log
(1) 创建系统包。
SP_CREATE_SYSTEM_PACKAGES (1,‘DBMS_LOGMNR’);
(2) 添加需要分析的归档日志文件。
DBMS_LOGMNR.ADD_LOGFILE(’/dbarch/dmarch/ARCHIVE_LOCAL1_0x2EACED66_EP0_2026-03-19_14-13-40.log’);
(3) 查询通过 ADD_LOGFILE 添加的归档日志文件
可以查询 VLOGMNR_LOGS动态视图进行插入,如下:
SELECT LOW_SCN,NEXT_SCN, LOW_TIME, HIGH_TIME, LOG_ID, FILENAME FROM VLOGMNR_LOGS;
(4) 启动归档日志文件分析。
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2128,STARTTIME=>TO_DATE(‘2024-09-06 22:45:16’,‘YYYY-MM-DD HH24:MI:SS’),ENDTIME=>TO_DATE(‘2024-11-29 22:45:16.’,‘YYYY-MM-DD HH24:MI:SS’));
或不指定时间
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2128);
(5) 查看归档日志文件的分析结果。
SELECT * FROM VLOGMNR_CONTENTS;
进行日志挖掘过程中,在 VLOGMNR_LOGS、VLOGMNR_CONTENTS 等数据库动态性能视图上会产生分析数据,数据存储在 TEMP 临时表空间上,会话断开或终止归档日志文件分析后,数据会被清除。可以将VLOGMNR_CONTENTS视图内容写入一张普通表后进行分析,避免分析结果丢失。
create table logmnrtab1 as select * from V$LOGMNR_CONTENTS;
数据库对象信息需到原库查询确认
从以上内容可以看出物化视图基表大量insert操作,进一步通过sqllog确认该物化视图全量刷新频率由1天改成每5分钟刷新一次,进而导致归档量激增,造成IO瓶颈
(6) 终止归档日志文件分析。
DBMS_LOGMNR.END_LOGMNR();
当完成对 VLOGMNR_CONTENTS 的查询和分析后,务必执行以下命令来关闭 LogMiner 会话并释放资源:
·清空当前会话的 VLOGMNR_LOGS 和 V$LOGMNR_CONTENTS 等视图中的数据
·释放会话占用的内存资源
·解除对归档日志文件的引用
最佳实践:进行日志挖掘时,建议在同一个会话中按顺序执行 ADD_LOGFILE → START_LOGMNR → 查询 V$LOGMNR_CONTENTS → END_LOGMNR,确保资源及时释放。
未及时释放安全风险:
·日志挖掘启动后,系统会在当前会话中分配内存来加载归档日志并维护 V$LOGMNR_CONTENTS 等动态视图的数据。如果分析完成但不结束会话,这部分内存资源会一直被该会话占用而无法释放,可能导致数据库整体内存使用量上升;
·日志挖掘通常会加载归档日志文件。如果分析完毕后一直不释放会话和日志句柄,归档日志文件可能因被会话引用而无法被系统正常删除或归档清理,长期累积可能导致归档空间告警。
文章
阅读量
获赞
