1.现象:

客户10.2.0.4 RAC环境,出现大量的library cache lock和cursor: pin S wait on X等待,经分析是由于统计信息收集僵死导致的。
数据库在8点到9点期间,数据库两个节点都存在明显的cursor: pin S wait on X和library cache lock的等待:

  TOP 5 EVENT:

Event

Waits

Time(s)

Avg   Wait(ms)

%   Total Call Time

Wait   Class

cursor:   pin S wait on X

1,573,056

30,651

19

146.2

Concurrency

library   cache lock

31,757

7,009

221

33.4

Concurrency

CPU   time

 

6,416

 

30.6

 

DFS   lock handle

12,381

2,979

241

14.2

Other

latch:   library cache

1,646

1,974

1,199

9.4

Concurrency

Event

Waits

Time(s)

Avg   Wait(ms)

%   Total Call Time

Wait   Class

cursor:   pin S wait on X

17,586,451

342,437

19

812.1

Concurrency

library   cache lock

63,657

30,153

474

71.5

Concurrency

CPU   time

 

3,820

 

9.1

 

db   file sequential read

241,761

1,094

5

2.6

User   I/O

inactive   session

两个节点的等待现象基本一致,而节点1上还存在明显的DFS lock handle等待事件。
通过分析ASH信息,发现library cache lock和cursor: pin S wait on X等待基本上都是6点之后才开始出现:

 2.分析原因

SELECT trunc(sample_time, 'hh24') TIME, COUNT(*)
FROM WRH$_ACTIVE_SESSION_HISTORY ash, wrh$_event_name en
WHERE ash.event_id = en.event_id
AND sample_time>= to_timestamp('', 'yyyymmdd')
AND event_name IN ('cursor: pin S wait on X', 'library cache lock')
GROUP BY trunc(sample_time, 'hh24')
ORDER BY 1;

查询事件发生的情况

而观察出现cursor: pin S wait on X和library cache lock等待会话的BLOCKING SESSION,发现大部分处于等待的会话被会话37锁定:

SELECT to_char(sample_time, 'hh24:mi:ss.ff') TIME, session_id sid,
decode(en.event_name, 'cursor: pin S wait on X', to_number(substr(ltrim(to_char(p2, '0xxxxxxxxxxxxxxx')), 1, 8), 'xxxxxxxx'), blocking_session) b_sid,
en.event_name
FROM WRH$_ACTIVE_SESSION_HISTORY ash, wrh$_event_name en
WHERE ash.event_id = en.event_id(+)
AND instance_number = 1
AND sample_time >= to_timestamp('', 'yyyymmddhh24mi')
AND sample_time <= to_timestamp('', 'yyyymmddhh24mi')
ORDER BY 1;

查询堵塞事件

TIME                      SID      B_SID EVENT_NAME
------------------ ---------- ---------- ------------------------------
08:00:09.569 457 4294967291 latch: library cache
08:00:09.569 52 981 cursor: pin S wait ON X
08:00:09.569 168 73 library cache LOCK
08:00:09.569 1763 4294967291 SQL*Net message FROM client
08:00:09.569 123 4294967295 kksfbc child completion
08:00:09.569 476 4294967291 kst: async disk IO
08:00:09.569 500 4294967292 db file sequential READ
08:00:09.569 327 4294967291 SQL*Net message TO client
08:00:09.569 233 4294967291 db file scattered READ
08:00:09.569 73 73 DFS LOCK handle
08:00:09.569 1889 4294967291 gc CURRENT block 2-way
08:00:09.569 1969 981 cursor: pin S wait ON X
08:00:09.569 857 981 cursor: pin S wait ON X
08:00:09.569 812 168 cursor: pin S wait ON X
08:00:09.569 981 73 library cache LOCK
08:00:19.669 52 981 cursor: pin S wait ON X
08:00:19.669 812 168 cursor: pin S wait ON X
08:00:19.669 857 981 cursor: pin S wait ON X
08:00:19.669 1969 981 cursor: pin S wait ON X
08:00:19.669 233 4294967291 db file scattered READ
08:00:19.669 500 4294967292 db file sequential READ
08:00:19.669 1763 4294967291 db file sequential READ
08:00:19.669 476 4294967291 kst: async disk IO
08:00:19.669 457 4294967291 kksfbc child completion
08:00:19.669 73 73 DFS LOCK handle
08:00:19.669 654 4294967291 SQL*Net message TO client
08:00:19.669 168 73 library cache LOCK
08:00:19.669 981 73 library cache LOCK
08:00:29.769 1969 981 cursor: pin S wait ON X
08:00:29.769 52 981 cursor: pin S wait ON X
08:00:29.769 457 4294967291 kksfbc child completion
08:00:29.769 981 73 library cache LOCK
08:00:29.769 168 73 library cache LOCK
08:00:29.769 500 4294967292 db file sequential READ
08:00:29.769 73 73 DFS LOCK handle
08:00:29.769 654 4294967291 SQL*Net message TO client
08:00:29.769 327 4294967291 SQL*Net message TO client
08:00:29.769 1763 4294967291 db file sequential READ
08:00:29.769 857 981 cursor: pin S wait ON X
08:00:29.769 123 4294967295 latch: library cache
08:00:29.769 196 4294967295 latch: library cache
08:00:29.769 233 4294967295 latch: library cache
08:00:29.769 812 168 cursor: pin S wait ON X
08:00:29.769 476 4294967291 kst: async disk IO
08:00:39.879 476 4294967291 kst: async disk IO
08:00:39.879 658 4294967291 db file sequential READ
08:00:39.879 500 4294967292 db file sequential READ
08:00:39.879 1969 981 cursor: pin S wait ON X
08:00:39.879 857 981 cursor: pin S wait ON X
08:00:39.879 812 168 cursor: pin S wait ON X
08:00:39.879 52 981 cursor: pin S wait ON X
08:00:39.879 981 73 library cache LOCK
08:00:39.879 168 73 library cache LOCK
08:00:39.879 1849 4294967291 SQL*Net message TO client
08:00:39.879 327 4294967291 SQL*Net message TO client
08:00:39.879 235 4294967291 rdbms ipc reply
08:00:39.879 19 4294967291 rdbms ipc reply
08:00:39.879 73 73 DFS LOCK handle
08:00:39.879 123 4294967294 enq: WF - contention
08:00:49.987 476 4294967291 kst: async disk IO
08:00:49.987 500 4294967292 db file sequential READ
08:00:49.987 382 4294967291 gc cr block busy
08:00:49.987 1969 981 cursor: pin S wait ON X
08:00:49.987 857 981 cursor: pin S wait ON X
08:00:49.987 812 168 cursor: pin S wait ON X
08:00:49.987 235 4294967295 kksfbc child completion
08:00:49.987 658 4294967295 latch: library cache
08:00:49.987 19 4294967291 latch: library cache
08:00:49.987 981 73 library cache LOCK
08:00:49.987 168 73 library cache LOCK
08:00:49.987 1889 4294967291 SQL*Net message FROM client
08:00:49.987 73 73 DFS LOCK handle
08:00:49.987 52 981 cursor: pin S wait ON X

查询结果

可以判断,导致数据库实例HANG死的原因是因为SID为73的进程:

SELECT to_char(sample_time, 'hh24:mi:ss'), program, action, event_name
FROM wrh$_active_session_history ash, wrh$_event_name en
WHERE session_id = 73
AND ash.event_id = en.event_id(+)
AND sample_time >= to_date('', 'yyyymmddhh24mi')
AND sample_time <= to_date('', 'yyyymmddhh24mi')
ORDER BY 1;

查询该会话运行的程序

TO_CHAR( PROGRAM                                  ACTION                         EVENT_NAME
-------- ---------------------------------------- ------------------------------ ---------------------------
05:50:07 oracle@orcldb5 (J002) GATHER_STATS_JOB db file sequential READ
05:50:17 oracle@orcldb5 (J002) GATHER_STATS_JOB db file sequential READ
05:50:27 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:50:37 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:50:47 oracle@orcldb5 (J002) GATHER_STATS_JOB gc cr block 2-way
05:50:57 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:51:08 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:51:18 oracle@orcldb5 (J002) GATHER_STATS_JOB db file scattered READ
05:51:28 oracle@orcldb5 (J002) GATHER_STATS_JOB gc cr multi block request
05:51:38 oracle@orcldb5 (J002) GATHER_STATS_JOB direct path WRITE temp
05:51:48 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:51:58 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:52:08 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:52:18 oracle@orcldb5 (J002) GATHER_STATS_JOB db file scattered READ
05:52:28 oracle@orcldb5 (J002) GATHER_STATS_JOB db file sequential READ
05:52:38 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:52:49 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:52:59 oracle@orcldb5 (J002) GATHER_STATS_JOB db file scattered READ
05:53:09 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:53:19 oracle@orcldb5 (J002) GATHER_STATS_JOB db file scattered READ
05:53:29 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:53:39 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:53:49 oracle@orcldb5 (J002) GATHER_STATS_JOB gc CURRENT GRANT 2-way
05:53:59 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:54:09 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:54:20 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:54:30 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:54:40 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:54:50 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:55:00 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:55:10 oracle@orcldb5 (J002) GATHER_STATS_JOB db file sequential READ
05:55:20 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:55:30 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:55:40 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:55:51 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:56:01 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:56:11 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:56:21 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:56:31 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:56:41 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:56:51 oracle@orcldb5 (J002) GATHER_STATS_JOB gc CURRENT GRANT 2-way
05:57:01 oracle@orcldb5 (J002) GATHER_STATS_JOB library cache pin
05:57:11 oracle@orcldb5 (J002) GATHER_STATS_JOB DFS LOCK handle
05:57:21 oracle@orcldb5 (J002) GATHER_STATS_JOB DFS LOCK handle
05:57:32 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:57:42 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:57:52 oracle@orcldb5 (J002) GATHER_STATS_JOB DFS LOCK handle
05:58:02 oracle@orcldb5 (J002) GATHER_STATS_JOB db file sequential READ
05:58:12 oracle@orcldb5 (J002) GATHER_STATS_JOB db file sequential READ
05:58:22 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:58:32 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:58:42 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:58:52 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:59:03 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:59:13 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:59:23 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:59:33 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
05:59:43 oracle@orcldb5 (J002) GATHER_STATS_JOB db file sequential READ
05:59:53 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
06:00:03 oracle@orcldb5 (J002) GATHER_STATS_JOB DFS LOCK handle
06:00:13 oracle@orcldb5 (J002) GATHER_STATS_JOB latch: library cache
06:00:23 oracle@orcldb5 (J002) GATHER_STATS_JOB DFS LOCK handle
06:00:34 oracle@orcldb5 (J002) GATHER_STATS_JOB DFS LOCK handle
06:00:44 oracle@orcldb5 (J002) GATHER_STATS_JOB DFS LOCK handle
06:00:54 oracle@orcldb5 (J002) GATHER_STATS_JOB

查询结果

  根据MOS文档,Bug 6011045 – DBMS_STATS causes deadlock between ‘cursor: pin S wait on X’ and ‘library cache lock’ [ID 6011045.8],这个问题是RAC环境中Oracle收集统计信息的BUG,在自动收集数据字典信息时,可能会出现进程HANG死,并导致大量的library cache lock和cursor: pin S wait on X等待,此外还可能出现DFS lock handle以及row cache lock的等待。
这个BUG确认影响版本包括10.2.0.4和10.2.0.5,这个BUG Oracle在10.2.0.5.5 PSU中进行了修复。

library cache lock和cursor: pin S wait on X等待的更多相关文章

  1. 关于library cache lock和row cache lock产生的常见原因

    这两个等待事件其实很少出现在top5列表中,一般都没什么印象,在此整理记录以便以后查阅. 常见的library cache lock产生的原因在<高级OWI与Oracle性能调查>这本书和 ...

  2. 如何使用event 10049分析定位library cache lock and library cache pin

    Oracle Library Cache 的 lock 与 pin 说明 一. 相关的基本概念 之前整理了一篇blog,讲了Library Cache 的机制,参考: Oracle Library c ...

  3. impdp时卡住,DW等待library cache lock

    同事反映impdp时在SCHEMA_REPORT/TYPE/TYPE_SPEC步骤卡住,1个多小时后也没有响应, 查下v$session: select program,sid, event,bloc ...

  4. Library cache lock/pin详解

    Library cache lock/pin 一.概述 ---本文是网络资料加metalink 等整理得来一个实例中的library cache包括了不同类型对象的描述,如:游标,索引,表,视图,过程 ...

  5. 外键约束列并没有导致大量建筑指数library cache pin/library cache lock

    外键约束列并没有导致大量建筑指数library cache pin/library cache lock 清除一个100大数据表超过一百万线,发现已经运行了几个小时: delete B001.T_B1 ...

  6. Library Cache: Lock, Pin and Load Lock

    What is "Library cache lock" ? This event controls the concurrency between clients of the ...

  7. Library cache lock 故障解决一例

    今天收到同事电话,说是数据库中一张名为acct_balance进行操作是奇慢,第一反映是不是扫行计划有问题,结果我错了,现将过程记录下来. 用pl/sql连上数据库情况:1.对acct_balance ...

  8. Performance tuning library cache lock & single-task message

    My colleague suddenly encountered a problem today,a Database becomes very slow , and the a lot of se ...

  9. 深入理解shared pool共享池之library cache的library cache lock系列四

    本文了解下等待事件library cache lock,进一步理解library cache,之前的文章请见:  深入理解shared pool共享池之library cache的library ca ...

随机推荐

  1. linux中的磁盘的MBR记录详解

    在硬盘中,硬盘的0柱面0磁头第一个1扇区称为主引导扇区,也叫主引导记录-MBR(main boot record),其中MBR是以下三个部分组成 1.Bootloader,主引导程序---446个字节 ...

  2. lintcode:买卖股票的最佳时机 III

    买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组 [4,4,6,1,1,4,2 ...

  3. 一起简单写一下AIDL,入个门

    前话 最近接触了Android开发的一个新知识,AIDL(¬_¬因为到现在都没用过) 因此不断谷歌找资料找Demo,自己尝试写一下. 因为用AndroidStudio作为开发环境,期间遇到过许多问题, ...

  4. JMS基本概念

    原文:http://blog.csdn.net/jiuqiyuliang/article/details/46701559 The Java Message Service (JMS) API is ...

  5. 笔者带你剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)

    注:本文部分内容引用本人博客http://gao-xianglong.iteye.com/blog/1973591   前言 在开始讲解淘宝的TDDL(Taobao Distribute Data L ...

  6. 转载 a href=#与 a href=javascript:void(0) 的区别

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...

  7. iphone/ipad实现自定义的开关UISwitch(continuous,clipsToBounds,userInteractionEnabled属性)

    这里主要讲几个UIView的几个属性,具体大家可以下载代码看看, 下载地址是: http://download.csdn.net/detail/rhljiayou/5960003 实现效果是: 代码中 ...

  8. android-HttpClient上传信息(包括图片)到服务端

    需要下载apache公司下的HttpComponents项目下的HTTPCLIENT ----------地址为http://hc.apache.org/downloads.cgi 主要是用到了htt ...

  9. MVC列表页通过CheckBox进行批量选择删除

    1.Html代码,将所有CheckBox包含于删除表单,并且所有列表项的CheckBox使用相同的Name,并且Value设置为数据项主键ID @using (Html.BeginForm(" ...

  10. laravel下的团队开发

    当你的团队在开发一个大型应用时,该应用的不同部分可能以不同的速度前进.比如,设想下面的场景:一个开发热源被分配 数据层 的backend工作,而另外一个开发人员做front-end和web/contr ...