在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故障的解决过程相关推荐

  1. oracle 存储过程挂起,library cache pin与PROCEDURE的重建

    library cache pin与PROCEDURE的重建 前面提到,Oracle10g重建Procedure的处理有所增强,最初看到这个增强的时候,我想这个增强是否可以减少困扰已久的Library ...

  2. 怎么发现RAC环境中#39;library cache pin#39;等待事件的堵塞者(Blocker)?

    怎么发现RAC环境中的'library cache pin'等待事件的堵塞者(Blocker) 參考自 How to Find the Blocker of the 'library cache pi ...

  3. 记一次library cache lock/library cache pin导致的函数编译hang住分析及处理过程

    墨墨导读:业务在进行alter function my_function_name compile时,有两个函数编译无法通过,现象就是会hang住,这里分享处理的整个过程. 一.前言 业务在进行alt ...

  4. (转载)library cache lock和library cache pin到底是什么

    (http://www.dbsnake.net/library-cache-lock-and-pin.html) Posted: December 16, 2011 | Author: Cui Hua ...

  5. 一起因网线问题引起的网络故障的解决过程

    环境:上层交换机是思科的2960,下层交换机是一台普通的tp的百兆交换机,两台交换机在两个办公室,中间隔了一条道,网线走的比较麻烦,需要穿道还需要上屋顶. 问题:早上查看交换机时发现2960上对应的端 ...

  6. 记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程

    环境描述 某公司有一套系统,2台Windows2003系统,采用自带的群集管理器功能实现双机热备功能,正常情况下,服务器10.1.1.1承载中间件应用服务,服务器10.1.1.2承载数据库服务,仅当其 ...

  7. 瑞萨RL78系列单片机报内存溢出故障的解决过程。RA78K0R error E3206: Segment ‘@@CODEL‘ can‘t allocate to memory - ignored

    最近开始使用瑞萨的R7F0C908芯片,ROM48K,对于目前的项目肯定是足够了,虽知道代码完成后,编译出现这个故障:RA78K0R error E3206: Segment '@@CODEL' ca ...

  8. 一个奇怪的生产环境配置ldap服务引起的故障及解决过程分享

    ldap服务已应用几年了.当初自己部署时 都很顺利的(都是脚本统一处理的). 服务器部署时都是统一模版直接推过去就好了. 如今,新增一批服务器要部署ldap 客户端统一认证,这次安排下属去搞,他部署完 ...

  9. 并行insert出现library cache lock与cursor: pin S wait on X等待问题记录

    一. 故障现象与紧急处理 开发反馈凌晨5点左右应用出现大量报错 ORA-04021: timeout occurred while waiting to lock object,并且集中出现在inse ...

  10. oracle library cache lock,【案例】Oracle等待事件library cache lock产生原因和解决办法...

    [案例]Oracle等待事件library cache lock产生原因和解决办法 时间:2016-12-07 18:56   来源:Oracle研究中心   作者:网络   点击: 次 天萃荷净 O ...

最新文章

  1. ResNet网络的训练和预测
  2. 2.1 词汇表征-深度学习第五课《序列模型》-Stanford吴恩达教授
  3. Rancher前奏--配置Nexus
  4. Device eth0 does not seem to be present,delaying initialization的解决办法
  5. python中浮点数类型_Python基本数据类型之浮点型
  6. oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。...
  7. 用poi-3.6-20091214.jar 实现java给excel资料加密
  8. UML教程5:协作图
  9. matlab卷积神经网络的实现,matlab卷积神经网络库
  10. Kettle 数据迁移
  11. 20162327WJH2016-2017-2《程序设计与数据结构》课程总结
  12. 私有云的优缺点_公有云、私有云、混合云的优缺点
  13. swift野梦抄袭 taylor_如何看待蔡健雅新歌《半途》被指抄袭 Taylor Swift 的《Safe Sound》?...
  14. OSChina 周四乱弹 —— 用户体验不好就是要出人命的
  15. 小程序流量主广告赚钱
  16. sklearn线性回归,支持向量机SVR回归,随机森林回归,神经网络回归参数解释及示例
  17. 根据IP获取城市代码
  18. PYTHON 画一支圆珠笔
  19. 换友情链接时候是换Http的还是Https的好?
  20. SQL Server数据库语法篇(付费内容限时开放)

热门文章

  1. 灵活的Zend Framework之使用自定义的Frontcontroller
  2. iMazing for mac中文版苹果iOS设备管理器(已更新至v2.9.12版本)
  3. 再见,Java 8!Java 17 竟然是史上最快的 JDK。。
  4. 搞了一个迭代发布下SpringBoot Jar瘦身方案,老大给我打了个A+
  5. 聊聊职场中的学历问题
  6. python 删除第三方库_python中通过pip安装的第三方库在哪里
  7. Volatile的实现原理(看这篇就够了)
  8. 阿里45K高级Java岗,必备技能清单
  9. Git版本控制及远程仓库的使用
  10. Mysql——应用学习之旅