0106library cache pin的快速定位与解决

[20150106]library cache pin的快速定位与解决.txt

--昨天别人的系统遇到library cache pin问题,导致前台业务停顿,出现问题后请求协助.
--我以前也遇到,也是手忙脚乱。我自己写过一个定位的脚本:

http://blog.itpub.net/267265/viewspace-754965/

$ cat lcp.sql
column h_wait format A20
column sql_text format a30
SELECT   s.SID,s.serial#, waiter.p1raw w_p1r, holder.event h_wait, holder.p1raw h_p1r, holder.p2raw h_p2r, holder.p3raw h_p2r,
         COUNT (s.SID) users_blocked, SQL.sql_id, SQL.hash_value, SQL.sql_text
    FROM v$sql SQL, v$session s, x$kglpn p, v$session_wait waiter, v$session_wait holder
   WHERE s.sql_hash_value = SQL.hash_value
     AND p.kglpnhdl = waiter.p1raw
     AND s.saddr = p.kglpnuse
     AND waiter.event LIKE 'library cache pin'
     AND holder.SID = s.SID
GROUP BY s.SID,s.serial#, waiter.p1raw, holder.event, holder.p1raw, holder.p2raw, holder.p3raw, SQL.sql_id, SQL.hash_value, SQL.sql_text;

select 'alter system kill session '''||sid||','||serial#||''' immediate ;' from (
SELECT   s.SID,s.serial#, waiter.p1raw w_p1r, holder.event h_wait, holder.p1raw h_p1r, holder.p2raw h_p2r, holder.p3raw h_p2r,
         COUNT (s.SID) users_blocked, SQL.sql_id, SQL.hash_value, SQL.sql_text
    FROM v$sql SQL, v$session s, x$kglpn p, v$session_wait waiter, v$session_wait holder
   WHERE s.sql_hash_value = SQL.hash_value
     AND p.kglpnhdl = waiter.p1raw
     AND s.saddr = p.kglpnuse
     AND waiter.event LIKE 'library cache pin'
     AND holder.SID = s.SID
GROUP BY s.SID,s.serial#, waiter.p1raw, holder.event, holder.p1raw, holder.p2raw, holder.p3raw, SQL.sql_id, SQL.hash_value, SQL.sql_text );

--不过我去了现场,正好是别人解决的,别人的方法很独特,自己做一个记录:

1.建立测试环境:
SCOTT@test> @ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

--会话1:
CREATE OR REPLACE PROCEDURE proc1
IS
BEGIN
   DBMS_LOCK.sleep (1000);
END;
/

SCOTT@test> @spid
       SID    SERIAL# C50
---------- ---------- --------------------------------------------------
       396       1151 alter system kill session '396,1151' immediate;

SPID
------
28205

--执行脚本:
SCOTT@test> exec proc1

--打开会话2执行:
CREATE OR REPLACE PROCEDURE proc1
IS
BEGIN
   DBMS_LOCK.sleep (1000);
END;
/

--打开会话3执行lcp.sql脚本:
SCOTT@test> @lcp

       SID    SERIAL# W_P1R            H_WAIT               H_P1R            H_P2R            H_P2R            USERS_BLOCKED SQL_ID        HASH_VALUE SQL_TEXT
---------- ---------- ---------------- -------------------- ---------------- ---------------- ---------------- ------------- ------------- ---------- ------------------------------
       396       1151 00000000BE53E508 PL/SQL lock timer    00               00               00                           1 7ap74x3urn7f7 4118420935 BEGIN proc1; END;

'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||'''IMMEDIATE;'
-------------------------------------------------------------------------------------------------------------------------
alter system kill session '396,1151' immediate ;

--很明显只要kill掉会话1的session就ok了。

2.他的定位方法:

SCOTT@test> SELECT * FROM V$DB_OBJECT_CACHE WHERE  type='PROCEDURE' and LOCKS!='0';

Record View
As of: 2015/1/6 16:14:18

OWNER:               SCOTT
NAME:                PROC1
DB_LINK:            
NAMESPACE:           TABLE/PROCEDURE
TYPE:                PROCEDURE
SHARABLE_MEM:        25168
LOADS:               1
EXECUTIONS:          0
LOCKS:               2
PINS:                1
KEPT:                NO
CHILD_LATCH:         9222
INVALIDATIONS:       0
HASH_VALUE:          301736966
LOCK_MODE:           EXCLUSIVE
PIN_MODE:            SHARED
STATUS:              VALID
TIMESTAMP:           2013-03-04/16:07:26
PREVIOUS_TIMESTAMP: 
LOCKED_TOTAL:        4
PINNED_TOTAL:        3
PROPERTY:           
FULL_HASH_VALUE:     373f969e72de08d9a24f345d11fc2406

--LOCKS>=1并不表示locks,也许是正在运行!我感觉查询应该是locks>pins才有问题。大家可以测试看看。

SCOTT@test> column object format a30
SCOTT@test> select * from V$ACCESS WHERE object='PROC1';
SID OWNER  OBJECT   TYPE
---- ------ -------- ----------
396 SCOTT  PROC1    PROCEDURE

SCOTT@test> select sid,serial# from v$session where sid=396;
       SID    SERIAL#
---------- ----------
       396       1151

--很明显结果都是一样的。

3.kill 有问题会话。
SCOTT@test> alter system kill session '396,1151' immediate;
System altered.

SCOTT@test> SELECT * FROM V$DB_OBJECT_CACHE WHERE  type='PROCEDURE' and LOCKS!='0';
no rows selected

SCOTT@test> SELECT * FROM V$DB_OBJECT_CACHE WHERE  type='PROCEDURE' and name='PROC1';

Record View
As of: 2015/1/6 16:25:09

OWNER:               SCOTT
NAME:                PROC1
DB_LINK:            
NAMESPACE:           TABLE/PROCEDURE
TYPE:                PROCEDURE
SHARABLE_MEM:        25168
LOADS:               2
EXECUTIONS:          1
LOCKS:               0
PINS:                0
KEPT:                NO
CHILD_LATCH:         9222
INVALIDATIONS:       0
HASH_VALUE:          301736966
LOCK_MODE:           NONE
PIN_MODE:            NONE
STATUS:              VALID
TIMESTAMP:           2013-03-04/16:07:26
PREVIOUS_TIMESTAMP: 
LOCKED_TOTAL:        4
PINNED_TOTAL:        4
PROPERTY:           
FULL_HASH_VALUE:     373f969e72de08d9a24f345d11fc2406

--感觉这种方式定位更加简单。

时间: 2024-10-26 11:04:52

0106library cache pin的快速定位与解决的相关文章

[20130228]等待事件library cache pin的快速定位与解决.txt

[20130228]等待事件library cache pin的快速定位与解决.txt 前几天管理的服务器出现library cache pin,当时解决有点乱了阵脚,正好下午空闲做一个例子来定位library cache pin事件以及解决方法,另外我也看许多blog,感觉定位太复杂,不合适快速解决问题: 1.环境以及问题再现: SQL> select * from v$version where rownumBANNER------------------------------------

.NET程序调试技巧(一):快速定位异常的一些方法

  这篇文章主要介绍了.NET程序调试技巧(一):快速定位异常的一些方法,本文讲解了定位本机异常.在客户环境定位.net程序异常两方面的内容,需要的朋友可以参考下 作为一个程序员,解BUG是我们工作中常做的工作,甚至可以说解决问题能力是一个人工作能力的重要体现.因为这体现了一个程序员的技术水平.技术深度.经验等等. 那么在我们解决BUG的过程中,定位问题是非常重要的.有句话叫"发现问题是解决问题的一半. 本文讲述就快速定位异常(专指.NET程序异常)的方法.包括在本机定位异常,在客户环境定位.n

win7系统快速定位照片及快速文档查找的方法

  分类筛选直观显示让库更好用 库功能是Windows 7系统最大的亮点之一,它彻底改变了我们的文件管理方式,从死板的文件夹方式变得更为灵活和方便.但随着库里的文件.文件夹数量越来越庞大,从库中直观地选择需要的文件就开始变得困难起来,其实,利用好库的排列方式就可以很好地解决这个问题,下面就用一些实例来看看怎么快速找出库中需要的文件. 文档查找的方法-word文档怎么快速查找"> 点击超级任务栏上的资源管理器打开库,可以看到在资源管理器菜单栏"更改您的视图"按钮下方有个&

Win7如何快速定位照片和查找文档

  分类筛选直观显示让库更好用 库功能是windows7系统最大的亮点之一,它彻底改变了我们的文件管理方式,从死板的文件夹方式变得更为灵活和方便.但随着库里的文件.文件夹数量越来越庞大,从库中直观地选择需要的文件就开始变得困难起来,其实,利用好库的排列方式就可以很好地解决这个问题,下面就用一些实例来看看怎么快速找出库中需要的文件. 点击超级任务栏上的资源管理器打开库,可以看到在资源管理器菜单栏"更改您的视图"按钮下方有个"排列方式"的下拉菜单,不同类型的库,在此菜单

Win 7快速定位照片、快速查找文档等

  微软Windows 7系统库快速定位照片.快速查找文档.自动显示日期使用方法. 分类筛选直观显示让库更好用 库功能是Windows 7系统最大的亮点之一,它彻底改变了我们的文件管理方式,从死板的文件夹方式变得更为灵活和方便.但随着库里的文件.文件夹数量越来越庞大,从库中直观地选择需要的文件就开始变得困难起来,其实,利用好库的排列方式就可以很好地解决这个问题,下面就用一些实例来看看怎么快速找出库中需要的文件. 点击超级任务栏上的资源管理器打开库,可以看到在资源管理器菜单栏"更改您的视图&quo

穆客带你快速定位Node.js内存泄露

在7月7日的云栖TechDay活动上,来自阿里云的穆客给大家分享了<如何快速定位Node.js内存泄露>话题.此次分享主要包括Node.js和APM的简单介绍.Node.js内存管理.Node.js内存泄露及其排查过程四个方面. 下面是现场分享观点整理. 大家好,我是来自阿里云的穆客,今天分享的是关于Node.js方面的故障排查.内存泄露的话题. Node.js和APM 很多人应该都知道Node.js,它是一个运行于服务端的基于Chrome V8引擎的 JavaScript 运行环境,Node

通过心理学知识提高问题定位与解决能力(上)

前言 软件开发工作无论是从宏观还是微观上看,都可以看作一个问题解决的过程.从宏观上看,软件开发,简单来说,就是弄清楚客户的需求是什么,然后通过分析.设计.编码和测试等一系列活动解决如何将需求转换为代码的问题.从微观上看,开发人员的日常工作中也面临各式各样的问题.比如,用于调试代码的Web服务器突然启动不了,开发人员必须先解决这个问题,否则手头上的工作可能无法进展. 作为开发人员,与其抱怨加班,不如去反思下自己的时间都去哪里了.我相信开发人员的大部分时间都花在解决各种各样的问题上了.不管是资深的开

.NET程序调试技巧(一):快速定位异常的一些方法_实用技巧

作为一个程序员,解BUG是我们工作中常做的工作,甚至可以说解决问题能力是一个人工作能力的重要体现.因为这体现了一个程序员的技术水平.技术深度.经验等等. 那么在我们解决BUG的过程中,定位问题是非常重要的.有句话叫"发现问题是解决问题的一半. 本文讲述就快速定位异常(专指.NET程序异常)的方法.包括在本机定位异常,在客户环境定位.net程序异常,在客户环境定位SilverLight异常. 一:定位本机异常 在我们本机定位异常很容易.假设我们都是使用的的VisualStudio,那么只需要在调试

0317Library Cache Pin/Lock Wait Events

[20160317]Library Cache Pin and Library Cache Lock Wait Events.txt --这篇blog主要是测试Library Cache Pin and Library Cache Lock Wait Events,不讲解细节,仅仅记录演示过程. 1.环境: SCOTT@book(84,45)> @ &r/ver1 PORT_STRING                    VERSION        BANNER -----------