oracle library cache pin,记一次library cache pin事件解决

ORACLE 10.2.0.4

REDHAT 5.3 32bit

[@more@]

今天开发人员突然报账说编译存储过程的时候一直卡到哪里就死掉了,通过查询发现在event列有一个library cache pin事件一直在等待,得到SID后查询session_wait:

LIBRARY CACHE PIN事件主要是由于管理library cache并发的,当一个object被pin住的话同时这个object会有一个heap载入内存,当用户要修改或者编译这个object的时候这个object的heap就必须要先被pin住,也就是拿到编辑锁,这个事件的等待时间通常为3秒。

library cache pin参数解析:

P1 KGL(kernel general Library ) 地址

P2 pin的地址

P3 100*mode+namespace

其中P1,P2分别和x$kglpn和x$kglob相关联

问题解决:

select sid,event,p1,p2,p3 from v$session_wait where sid=192;

通过以上查询的P1列转换为16进制的,然后将转换后的结果作为X$KGLPN表的KGLPNHDL作为条件进行查询:

select * from x$kglpn t where kglpnhdl = '7D897554';

KGLPNHDL--- Library Cache Handle Address

KGLPNADR--- Library Cache Pin Address.

KGLPNSES---持有锁的session

通过查看KGNMOD列有一个状态为2的,其他的均为0,说明此记录的session持有这个heap的锁,

通过P1列与x$kglob的KGLHDADR进行关联查找出锁住的SQL:

select * from x$kglob where KGLHDADR = '7D897554';

最后查询出持有此锁的sessionID:

select a.sid, a.username, a.program

from v$session a, x$kglpn b

where a.saddr = b.kglpnuse

and b.kglpnhdl like '%7D897554%';

得到SID后去session里面找到对应的记录进行kill:

select * from v$session_wait t where t.SID = 253;

alter system kill session '253,20928';

最后重新执行编译操作,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值