定位并解决library cache lock的方法
作者:sylar版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]
1、查看具体是那些操作导致library cache lock等待事件的发生
注意:此处SQL状态可以是active和INACTIVE
点击(此处)折叠或打开
- SELECT SE.INST_ID, --实例
- SQ.SQL_TEXT, /*SQL文本*/
- SQ.SQL_FULLTEXT, /*SQL全部文本*/
- SE.SID, /*会话的唯一标识,通常要对某个会话进行分析前,首先就需要获得该会话的SID。*/
- 'ALTER SYSTEM kill SESSION ''' || SE.SID || ',' || SE.SERIAL# ||
- ''';' kill,
- SQ.OPTIMIZER_COST AS COST_, /* COST 值*/
- SE.LAST_CALL_ET CONTINUE_TIME, /*执行时间 可能是单个sql也可能是整个功能*/
- SE.PREV_EXEC_START, /*SQL execution start of the last executed SQL statement*/
- SE.EVENT, /*等待事件*/
- SE.LOCKWAIT, /*是否等待LOCK(SE,P)*/
- SE.MACHINE, /*客户端的机器名。(WORKGROUP\PC-201211082055)*/
- SE.USERNAME, /*创建该会话的用户名*/
- SE.LOGON_TIME /*登陆时间*/
- FROM GV$SESSION SE,
- GV$SQLAREA SQ ,
- x$kglpn p
- WHERE SE.SQL_HASH_VALUE = SQ.HASH_VALUE(+)
- AND p.kglpnuse=SE.saddr(+) AND p.kglpnmod <> 0
- AND SE.SQL_ID = SQ.SQL_ID(+)
- AND SQ.INST_ID(+) = SE.INST_ID
- and p.kglpnhdl in ( select p1raw from gv$session_wait where event in ('library cache pin','library cache lock' ,'library cache load lock') )
2、根据上面结果得到引起该事件的SQL,确认这些SQL能不能kill
经查发现是下面两个SQL,且状态是INACTIVE
1)SQL一:
2)SQL二:
与业务再次确认,可以进行KILL
kill方法1:
根据” 1、 查看具体是那些操作导致library cache lock等待事件的发生“根据这个视图查出来的“kill”列结果进行kill

kill方法2:
如果方法1kill不掉这些SQL,则用下面SQL进行kill
该视图运行结果如下:
1)SQL一:
点击(此处)折叠或打开
- select count(tt.transport_point_no) countNo
- from tms_transport_point tt
- left join tms_unload_point_dtl ud
- on ud.transport_point_no = tt.transport_point_no
- left join store st
- on st.store_no = tt.store_no
- left join tms_quartzcenter q
- on tt.quartzcenter_no = q.quartzcenter_no
- where tt.store_type = '11'
- and ud.transport_point_no is null
点击(此处)折叠或打开
- select distinct t.QUARTZCENTER_SIMPLE_NAME centerNo,
- T.QUARTZCENTER_NAME centerName,
- t.zone_no areaNo,
- a.store_name areaName,
- t.isSign,
- nvl(p.system_param_value, 0) isBatchFlag,
- nvl(t.edit_time, t.create_time) downTime
- from tms_quartzCenter T
- left join store a
- on t.zone_no = a.store_code
- left join tms_system_param p
- on t.quartzcenter_no = p.quartzcenter_no
- and p.system_param_name = 'IsDeliverBatchFlag'
- where t.status = '0'
3、经沟通,kill引起该等待事件的SQL
kill方法1:
根据” 1、 查看具体是那些操作导致library cache lock等待事件的发生“根据这个视图查出来的“kill”列结果进行kill

kill方法2:
如果方法1kill不掉这些SQL,则用下面SQL进行kill
点击(此处)折叠或打开
- SELECT SE.INST_ID, --实例
- SQ.SQL_TEXT, /*SQL文本*/
- SQ.SQL_FULLTEXT, /*SQL全部文本*/
- 'kill -9 '||s.spid||';' kill,
- SQ.OPTIMIZER_COST AS COST_, /* COST 值*/
- SE.LAST_CALL_ET CONTINUE_TIME, /*执行时间 可能是单个sql也可能是整个功能*/
- SE.PREV_EXEC_START, /*SQL execution start of the last executed SQL statement*/
- SE.EVENT, /*等待事件*/
- SE.LOCKWAIT, /*是否等待LOCK(SE,P)*/
- SE.MACHINE, /*客户端的机器名。(WORKGROUP\PC-201211082055)*/
- SE.USERNAME, /*创建该会话的用户名*/
- SE.LOGON_TIME /*登陆时间*/
- FROM GV$SESSION SE,
- GV$SQLAREA SQ ,
- x$kglpn p,
- GV$process s
- WHERE SE.SQL_HASH_VALUE = SQ.HASH_VALUE(+)
- AND p.kglpnuse=SE.saddr
- AND SE.SQL_ID = SQ.SQL_ID(+)
- AND SE.INST_ID = SQ.INST_ID(+)
- and s.addr=SE.paddr(+)
- and p.kglpnhdl in ( select p1raw from gv$session_wait where event in ('library cache pin','library cache lock' ,'library cache load lock') )

4、MOS 的文档【122793.1】里说导致librarycache lock通常有2种原因
点击(此处)折叠或打开
- (1)A DML operation that is hangingbecause the table which is accessed is currently undergoing changes (ALTERTABLE). This may take quite a long time depending on the size of the table andthe type of the modification (e.g. ALTER TABLE x MODIFY (col1 CHAR(200) on atable with thousands of records)
- In this case,V$LOCK will show that the session doing the 'ALTER TABLE' with an exclusive DMLenqueue lock on the table object (LMODE=6, TYPE=TM where ID1 is the OBJECT_IDof the table). The waiting session however does not show up in V$LOCK yet so inan environment with a lot of concurrent sessions the V$LOCK information will beinsufficient to track down the culprit blocking your operation.
- (2)The compilation of package willhang on Library Cache Lock and Library Cache Pin if any users are executing aprocedure/function defined in the same package.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31324175/viewspace-2126076/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31324175/viewspace-2126076/