为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8 小版本PACK20
【操作系统】:麒麟
【CPU】:x86
【问题描述】*:昨晚11点,达梦数据库出现OOM了杀了主库了,没有切换(这里下个问题咨询),我再dm_dmap_br_202503.log里看到out of memory,我想咨询下,如何找到原因是什么SQL或者事件导致的,以防下次在发生。
可以通过操作系统日志/var/log/相应的message日志,sar日志等查看下当时服务器的资源使用情况,如果有当时的sqllog日志,可以看看故障前进行了什么sql操作,同时查看下当时的数据库运行日志,排查下是数据库的原因导致的内存资源不足还是服务器上有除数据库以外的其他服务占用资源太多,导致数据库服务被误杀
做一个临时表,用定时任务每隔1分钟或30s左右进行一次大内存占用sql查询插入到临时表里。
SELECT top 1 A.CREATOR, B.SQL_TEXT, ROUND(SUM(A.TOTAL_SIZE)/1024.0/2014.0) TOTAL_M, ROUND(SUM(A.DATA_SIZE)/1024.0/2014.0) DATA_SIZE_M FROM V$MEM_POOL A, V$SESSIONS B WHERE A.CREATOR=B.THRD_ID and B.state='ACTIVE' GROUP BY A.CREATOR,B.SQL_TEXT ORDER BY TOTAL_M DESC;