一次library cache pin故障的解决过程
在dbsnake 上看到的这篇文章,转过来。 主要还是学习解决问题的一个思路。这个往往比问题的解决更重要。
原文链接如下:
http://dbsnake.com/2010/06/solve-library-cache-pin.html
内容如下:
今天接到同事的电话,说他的一个存储过程已经run了一个多小时了,还在继续run,他觉得极不正常,按道理说不应该run这么长时间。
我说那我去看一下吧。
这个库是一个AIX上的10.2.0.4,我采集了一下问题时间段的AWR报告:
从AWR报告结果里我们可以看出在出问题的时间段,系统在经历严重的library cache pin以及library cache lock等待。
根据Load Profile的信息,看出导致上述library cache pin和library cache lock的并不是hardparse。
对于library cache pin等待来说,AWR报告的作用有限,最有效的方式就是找到持有library cache pin以及等待library cache pin的session,然后看看他们在做什么:
SQL> SELECT s.sid, kglpnmod"Mode", kglpnreq "Req", SPID "OS Process"
2 FROM v$session_wait w, x$kglpn p,v$session s ,v$process o
3 WHERE p.kglpnuse=s.saddr
4 AND kglpnhdl=w.p1raw
5 and w.event like '%library cache pin%'
6 and s.paddr=o.addr
7 /
SID Mode Req OS Process
---------- ---------- ---------- ------------
396 0 2 6381970
396 0 2 6381970
396 0 2 6381970
396 0 2 6381970
341 2 0 4092132
341 2 0 4092132
341 2 0 4092132
341 2 0 4092132
363 0 2 3514690
363 0 2 3514690
363 0 2 3514690
363 0 2 3514690
304 0 2 3977478
304 0 2 3977478
304 0 2 3977478
304 0 2 3977478
354 0 3 3137874
354 0 3 3137874
354 0 3 3137874
354 0 3 3137874
20 rows selected
我那位run存储过程的同事所在的session是396,从上述结果里我们可以看出来396现在想以Share模式(即Req=2)去持有library cache pin,同时现在持有上述library cache pin的是session 341,且341的持有模式也是Share(即Mode=2)。
本来Share和Share是可以共享的,但不幸的是在396之前,session 354想以Exclusive模式(即Req=3)去持有上述librarycache pin,这直接导致了396需要处于等待的Queue中,同时处于Queue中的还有363和304。
我为什么这么说呢,因为oracle对library cache pin的解释中有一句非常经典的话:
An X request (3) will be blocked by anypins held S mode (2) on the object.
An S request (2) will be blocked by any X mode (3) pin held, or may queue behind some other X request.
所以从AWR报告和上述查询结果中我们可以得出如下结论:
1、 我那位run存储过程的同事为什么run了1个多小时还没有run完是因为这个存储过程正在经历严重的library cache pin等待;
2、 而为什么会导致严重的library cache pin等待是因为session 341和354联手达到了这一效果,即341以Share模式持有library cache pin,接着354想以Exclusive模式持有,这直接导致所有的后续请求全部被处于等待的Queue中。也就是说341阻塞了354,而354又间接阻塞了396。
既然知道了原因,那我们去看一下session 341在做什么事情:
SQL> selectdecode(sql_hash_value,0,prev_hash_value,sql_hash_value) from v$session wheresid=341;
DECODE(SQL_HASH_VALUE,0,PREV_H
------------------------------
784727971
间隔10秒钟后再次执行:--间隔10秒查询的目的是判断session 的内容是否改变,从而判断出session 在干什么
SQL> selectdecode(sql_hash_value,0,prev_hash_value,sql_hash_value) from v$session wheresid=341;
DECODE(SQL_HASH_VALUE,0,PREV_H
------------------------------
784727971
间隔10秒钟后再次执行:
SQL> selectdecode(sql_hash_value,0,prev_hash_value,sql_hash_value) from v$session wheresid=341;
DECODE(SQL_HASH_VALUE,0,PREV_H
------------------------------
784727971
SQL> select sql_text from v$sqltextwhere hash_value=784727971 order by piece;
SQL_TEXT
----------------------------------------------------------------
begin -- Call the procedurep_adj_rrp_main(o_vc_flag => :o_vc_flag); end;
从结果里可以看到341一直在run一个存储过程。
给持有341的那位大姐打电话,问她在做什么,她告诉我说她从昨晚就开始run这个存储过程,今早来看发现死掉了,所以她就没管了。
知道原因后处理起来还是很容易的,当我把session 341干掉后,整个系统的library cache pin一下子就降下来了,接着我那位同事的run了一个多小时的存储过程过了没多久就run完了。
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(满); DBA2 群:62697977(满) DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群: 83829929 DBA5群: 142216823
DBA6 群:158654907 聊天 群:40132017 聊天2群:69087192
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请
转载于:https://www.cnblogs.com/tianlesoftware/archive/2011/07/27/3609629.html
一次library cache pin故障的解决过程相关推荐
- oracle 存储过程挂起,library cache pin与PROCEDURE的重建
library cache pin与PROCEDURE的重建 前面提到,Oracle10g重建Procedure的处理有所增强,最初看到这个增强的时候,我想这个增强是否可以减少困扰已久的Library ...
- 怎么发现RAC环境中#39;library cache pin#39;等待事件的堵塞者(Blocker)?
怎么发现RAC环境中的'library cache pin'等待事件的堵塞者(Blocker) 參考自 How to Find the Blocker of the 'library cache pi ...
- 记一次library cache lock/library cache pin导致的函数编译hang住分析及处理过程
墨墨导读:业务在进行alter function my_function_name compile时,有两个函数编译无法通过,现象就是会hang住,这里分享处理的整个过程. 一.前言 业务在进行alt ...
- (转载)library cache lock和library cache pin到底是什么
(http://www.dbsnake.net/library-cache-lock-and-pin.html) Posted: December 16, 2011 | Author: Cui Hua ...
- 一起因网线问题引起的网络故障的解决过程
环境:上层交换机是思科的2960,下层交换机是一台普通的tp的百兆交换机,两台交换机在两个办公室,中间隔了一条道,网线走的比较麻烦,需要穿道还需要上屋顶. 问题:早上查看交换机时发现2960上对应的端 ...
- 记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程
环境描述 某公司有一套系统,2台Windows2003系统,采用自带的群集管理器功能实现双机热备功能,正常情况下,服务器10.1.1.1承载中间件应用服务,服务器10.1.1.2承载数据库服务,仅当其 ...
- 瑞萨RL78系列单片机报内存溢出故障的解决过程。RA78K0R error E3206: Segment ‘@@CODEL‘ can‘t allocate to memory - ignored
最近开始使用瑞萨的R7F0C908芯片,ROM48K,对于目前的项目肯定是足够了,虽知道代码完成后,编译出现这个故障:RA78K0R error E3206: Segment '@@CODEL' ca ...
- 一个奇怪的生产环境配置ldap服务引起的故障及解决过程分享
ldap服务已应用几年了.当初自己部署时 都很顺利的(都是脚本统一处理的). 服务器部署时都是统一模版直接推过去就好了. 如今,新增一批服务器要部署ldap 客户端统一认证,这次安排下属去搞,他部署完 ...
- 并行insert出现library cache lock与cursor: pin S wait on X等待问题记录
一. 故障现象与紧急处理 开发反馈凌晨5点左右应用出现大量报错 ORA-04021: timeout occurred while waiting to lock object,并且集中出现在inse ...
- oracle library cache lock,【案例】Oracle等待事件library cache lock产生原因和解决办法...
[案例]Oracle等待事件library cache lock产生原因和解决办法 时间:2016-12-07 18:56 来源:Oracle研究中心 作者:网络 点击: 次 天萃荷净 O ...
最新文章
- ResNet网络的训练和预测
- 2.1 词汇表征-深度学习第五课《序列模型》-Stanford吴恩达教授
- Rancher前奏--配置Nexus
- Device eth0 does not seem to be present,delaying initialization的解决办法
- python中浮点数类型_Python基本数据类型之浮点型
- oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。...
- 用poi-3.6-20091214.jar 实现java给excel资料加密
- UML教程5:协作图
- matlab卷积神经网络的实现,matlab卷积神经网络库
- Kettle 数据迁移
- 20162327WJH2016-2017-2《程序设计与数据结构》课程总结
- 私有云的优缺点_公有云、私有云、混合云的优缺点
- swift野梦抄袭 taylor_如何看待蔡健雅新歌《半途》被指抄袭 Taylor Swift 的《Safe Sound》?...
- OSChina 周四乱弹 —— 用户体验不好就是要出人命的
- 小程序流量主广告赚钱
- sklearn线性回归,支持向量机SVR回归,随机森林回归,神经网络回归参数解释及示例
- 根据IP获取城市代码
- PYTHON 画一支圆珠笔
- 换友情链接时候是换Http的还是Https的好?
- SQL Server数据库语法篇(付费内容限时开放)
热门文章
- 灵活的Zend Framework之使用自定义的Frontcontroller
- iMazing for mac中文版苹果iOS设备管理器(已更新至v2.9.12版本)
- 再见,Java 8!Java 17 竟然是史上最快的 JDK。。
- 搞了一个迭代发布下SpringBoot Jar瘦身方案,老大给我打了个A+
- 聊聊职场中的学历问题
- python 删除第三方库_python中通过pip安装的第三方库在哪里
- Volatile的实现原理(看这篇就够了)
- 阿里45K高级Java岗,必备技能清单
- Git版本控制及远程仓库的使用
- Mysql——应用学习之旅