如何查看SAP HANA DB事务日志内容 排查SAP B1迁移时日志过大问题
HANA DB事务日志异常暴涨排查及日志内容查看方法
一、先排查日志暴涨的常见前置原因
- 确认HANA日志配置:先校验日志模式和归档状态,默认log_mode=normal模式下如果归档路径不可写、归档任务未正常运行,日志会持续堆积无法被覆盖回收,执行命令
SELECT VALUE FROM M_INIFILE_CONTENTS WHERE SECTION = 'persistence' AND KEY = 'log_mode'即可确认配置 - 排查长事务/大事务:哪怕操作次数少,只要事务长时间不提交,就会持有旧日志段不允许被覆盖,执行
SELECT TRANSACTION_ID, USER_NAME, START_TIMESTAMP, DURATION, MEMORY_SIZE FROM M_TRANSACTIONS ORDER BY DURATION DESC查看是否有运行超过30分钟的事务 - 排查LOB相关操作:SAP B1的附件、大文本、二进制字段如果被反复更新,每次写入都会产生数倍于数据本身的日志量,700次更新如果涉及LOB全量写入,完全可能产生数十GB日志,且这类底层写入动作不一定会被普通SQL Trace完整捕获
二、查看事务日志具体内容的方法
- 使用HANA内置视图
M_LOG_CONTENTS直接查询日志明细,执行以下SQL可以快速定位大体积日志对应的操作:
SELECT LOG_POSITION, TRANSACTION_ID, OPERATION_TYPE, SCHEMA_NAME, TABLE_NAME, RECORD_LENGTH, STATEMENT_STRING FROM M_LOG_CONTENTS WHERE LOG_TIME >= CURRENT_TIMESTAMP - INTERVAL 1 HOUR ORDER BY RECORD_LENGTH DESC
该视图可以直接展示每条日志对应的操作类型、涉及的表、单条日志大小、执行的SQL语句,按记录长度排序可以快速定位产生大日志的具体操作。
- 如需查看更底层的日志内容,使用HANA自带的
hdbcons工具的logparser功能,执行命令hdbcons "logparser -a -t 3600"即可导出最近1小时所有事务日志的完整内容,包括LOB写入、页级修改、索引更新这类不会在普通视图中暴露的底层操作。 - 自研程序关联排查:给所有自研程序的数据库连接增加会话标记,程序连接数据库后先执行
SET 'CLIENT_APPLICATION' = '自研程序对应模块名',之后在M_LOG_CONTENTS中关联M_CONNECTIONS视图即可过滤出所有自研程序产生的日志,快速定位问题模块。
三、验证步骤
- 临时停止所有自研程序运行,观察1小时内日志增长量,如果日志不再暴涨可直接确认是自研程序导致的问题;
- 如果停掉自研程序后日志依然暴涨,排查SAP B1自带的后台作业,比如索引重建、统计信息更新、数据同步这类默认自动运行的后台任务,这类任务不会出现在普通SQL Trace中,执行
SELECT JOB_NAME, STATUS, START_TIME, END_TIME FROM M_JOBS WHERE START_TIME >= CURRENT_TIMESTAMP - INTERVAL 1 HOUR即可查看近1小时的后台作业记录。
内容的提问来源于stack exchange,提问作者Mark Rabjohn
相关产品推荐
相关产品推荐

