全局死锁导致的trace目录超限处理过程

2021-03-03 00:00:00 分析 文件 告警 死锁 大小

近自动巡检平台频繁报目录大小超限告警,其/Oracle目录使用率搞达90%,处境危险啊,需要及时处理并清理过多或过大的文件,以免影响数据库正常运行,下面是处理过程

xxxx /oracle目录超限分析
查询文件大小分布
oracle@host:[/oracle/diag/rdbms/xxxx/xxxx3]du -sh * | sort -nr
633M alert
559M incident
59M log
39G trace
31M metadata
4.0K sweep
4.0K lck
1.2M stage
0 metadata_pv
0 metadata_dgif
0 ir
0 incpkg
0 hm
0 cdump

发现trace文件大 39G,继续分析trace目录下文件大小排序
oracle@host:[/oracle/diag/rdbms/xxxx/xxxx3/trace]du -s * | sort -nr | more
605996 xxxx3_lmhb_435758.trc
384372 xxxx3_mmon_435814.trc
383936 xxxx3_gen0_435696.trc
195148 cdmp_20210302160407
194724 cdmp_20210302161642
。。。。。
191836 cdmp_20210302155714
191304 cdmp_20210302154221
--More--
发现大量的cdmp文件,下面分析cdmp文件总大小
oracle@host:[/oracle/diag/rdbms/xxxx/xxxx3/trace]du -s * | sort -nr | grep cdmp| awk '{c +=$1} END {print c/1024/1024 "GB"}'
35.3309GB
可以看到该cdmp文件总大小高达36G,每个cdmp文件夹大小稳定,基本可以确定是这些cdmp文件造成的,我们进一步分析这些cdmp文件的情况
oracle@host:[/oracle/diag/rdbms/xxxx/xxxx3/trace/cdmp_20210302154221]ls -lrt | wc -l
10755
发现这些cdmp文件中有1万多个进程trc文件,我们需要确定什么导致了这些Dump,这里就需要分析告警日志,我们从告警日志中看到大量如下记录
2021-03-02T19:09:13.951864+08:00
ORA-00060: Global Enqueue Services Deadlock detected. See Note 60.1 at My Oracle for Troubleshooting ORA-60 Errors. More inf
o in file
/oracle/diag/rdbms/xxxx/xxxx3/trace/xxxx3_ora_253578.trc.
2021-03-02T19:09:14.116885+08:00
Dumping diagnostic data in directory=[cdmp_20210302190914], requested by (instance=3, osid=253578), summary=[abnormal proces
s termination]
这里问题比较清楚了,由于发生了全局死锁,oracle探测到这个问题,Dump了大量进程信息,然后打断死锁,结束后一个导致死锁的会话,后续我们通过分析trc文件,发现了导致死锁的SQL以及其其他用户信息,这需要作业务调整,避免并发的delete操作,这个问题需要业务解决,问题反馈后由于开发已经退场
且SQL都是封装好的,这个问题靠业务方暂时是无法解决了,我们只有写个定时任务删除这些cdmp文件了。

每天早上8点删除之前产生的cdmp文件
脚本内容
find /oracle/diag/rdbms/xxxx/xxxx3/trace -name "cdmp*"| xargs -I {} rm -rf {}
定时任务
0 8 * * * cd ~oracle/inspect;/home/oracle/inspect/deletecdmp.sh

相关文章