前言
4.3.4
SSD中library cache lock的分析
接上一期:
分析到这步,前边看似毫无头绪的问题似乎理清了,大量cursor:pin S wait on X已经理清楚,所有的矛头走指向了sid 859
这个会话信息中我们能看到:
>> 会话在等待library cache lock等待事件,等待时间4429秒
>> 会话以S模式请求句柄为
700000209bb9d80
的library cache对象(request=S)
>> 句柄为700000209bb9d80的library cache对象是SYS.C_OBJ#_INTCOL#,是一个cluster(簇聚)对象。
我们定位到该条信息后,再确认该条信息所属的会话,确认其会话信息如下:
到最后,
我们发现在会话859和会话624之间,形成了死锁
,具体的情况就是:
>> 会话859持有bbcee4f7上的mutex,请求700000209bb9d80上的library cache lock
>> 会话624持有700000209bb9d80上的library cache lock,请求bbcee4f7上的mutex
>> 其他会话产生大量的cursor:pin S wait on X等待事件,都是由于859长时间持有bbcee4f7上的mutex未释放导致的
到了这一步,是不是一切谜团都解开了?我们的分析是不是就完成了呢?
↓
↓
↓
↓
↓
↓
答案是:NO
Part 5
根因分析
经常做根因分析的老K此时还有疑惑:
>> 如果当时不重启,而kill掉死锁链上的会话,问题是否会解决?
>> 会话859和会话624都在做什么,为什么会死锁?
>> 单个会话持有一个cursor的mutex,怎么会让系统处于夯住的状态?
现在老K重点关注的就是如何解开上面的两个疑惑了,继续分析trace。
先看会话859,截取trace文件中的信息,如下:
先回答第二个问题:会话859在做什么?
后台进程是CJQ0,这个进程是ORACLE用来调度job的;我们知道,如果某个会话以S模式请求某个对象上的library cache lock,这个会话通常是在解析某个语句或者编译某个package时需要从library cache中查找该语句涉及对象的信息;在PROCESS 24的trace文件中查找“oper EXCL”关键字,
我们查到以下三条记录
:
在PROCESS 24的trace文件中查找“
oper EXCL
”关键字,我们查到以下
三条记录
:
Mutex 7000001e7d04898(859, 0) idn bbcee4f7 oper EXCL
Mutex 7000001e5fbe4e0(859, 0) idn fb52493f oper EXCL
Mutex 7000001e8faa990(859, 0) idn a8bbc174 oper EXCL
可能有人会问?一个会话怎么同时有三个cursor?
大家不要忘了ORACLE数据库中有递归调用的说法,也就是说前端发起一条简单的sql,ORACLE后台实际上产生了一系列的递归调用,那些调用实际上也是一些sql的集合。通过idn值继续查找,提炼一下,当前正在解析的三条sql语句分别是:
这不是一个数据库的后台进程,所以,相比于之前看到的859进程,我们能看到更多的信息,我们大致知道,这个进程是数据库调起的收集统计信息的job任务,在等待”cursor:pin S wait on X”事件,等待的解析对象是bbcee4f7;
因为它以X模式持有C_OBJ#_INTCOL#这个对象的library cache lock而阻塞了关键的会话859,那么我们来看看它为什么会持有这个library cache lock;我们到PROCESS 42的进程信息中搜索oper EXCL的关键字,搜索到两条相关信息如下:
Part 6
情景再现
t4时刻,这时CJQ0进程定时查询系统JOB时,需要硬解析,递归调用bbcee4f7时对其进行解析;
解析的过程中需要以S模式请求持有histgrm$及其相关对象(也就包括C_OBJ#_INTCOL#及其索引I_OBJ#_INTCOL#)的library cache lock;
在J000使用analyze的过程中,同样需要执行相关递归sql,需要进行硬解析,也就调用了上面说到的关键sql bbcee4f7;
所以最后造成了死锁。
Part 7
问题定位
Part 8
写在最后
到上面为止,我们已经定位bug,也获得了事中和事后的解决方案,不过老K更关注的是大家是否能从这个CASE中获得一些收获,这里不妨问问自己:
>> Systemstatedump中的cursor:pin S wait on X 我会查了吗?
>> Systemstatedump中的library cache lock 我会查了吗?
>> 如果我要模拟让我的数据库夯我会做吗?
>> 还有一个没有回答的问题?如果下次再遇到同样的问题,我能通过杀掉死锁链条里的进程解决这个问题么?
5.1 第三次头脑风暴
5.2 柳暗花明之会话859
5.3 柳暗花明之会话624
技术人生系列 · 我和数据中心的故事(第八期)Systemstate Dump分析经典案例(下)
来源:这里教程网
时间:2026-03-03 12:25:26
作者:
编辑推荐:
- 技术人生系列 · 我和数据中心的故事(第八期)Systemstate Dump分析经典案例(下)03-03
- 将pdf转换成word文档的两种方法03-03
- 如何恢复桌面上的word图标03-03
- 如何解除word安全模式03-03
- 如何将pdf转换成word格式03-03
- 如何将word转成pdf03-03
- 如何将ppt转换word03-03
- 如何将word背景去掉03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 技术人生系列 · 我和数据中心的故事(第八期)Systemstate Dump分析经典案例(下)
- 技术人生系列 · 我和数据中心的故事(第七期)Systemstate Dump分析经典案例(上)
- 如何给word排版
如何给word排版
26-03-03 - 技术人生系列 · 我和数据中心的故事(第九期)SQL优化之基于SQL特征的改写
- 如何把pdf转换成word格式
如何把pdf转换成word格式
26-03-03 - 技术人生系列第十期·我和数据中心的故事·运维无小事之一次导致数据丢失的小变更
- 技术人生系列·我和数据中心的故事(第十三期)-风险预警11g容易被忽略的导入性能问题
- 技术人生系列·我和数据中心的故事(第十二期)-风险预警·如何预防开发问题流到生产
- 橙色预警:索引空间泄露导致业务中断——技术人生系列十五期
橙色预警:索引空间泄露导致业务中断——技术人生系列十五期
26-03-03 - 记一条500行执行计划的SQL问题分析-从应急处理到根因分析-技术人生系列第十八期
