|
Library cache Pin等待事件通常在编译或重新编译PL/SQL,视图等数据库对象,或者进行grant,revoke操作时发生。判断Library cache Pin的方法如下(以下SQL代码均转载自《深入浅出Oracle--DBA入门,进阶与诊断案例》 盖国强著 的第五章 Buffer Cache与Shared Pool原理213页--215页):
1.获得Library cache Pin等待对象
select addr,kglhdadr,kglhdpar,
kglnaown,kglnaobj,kglnahsh,kslhdobj
from x$kglob
where kglhdadr in (select p1raw
from v$session_wait
where event like 'library%')
2.获得持有对象的session信息
select a.sid,a.username,a.program,b.addr,
b.kglpnadr,b.kglpnuse,b.kglpnses,
b.kglpnhdl,b.kglpnlck,b.kglpnmod,
b.kglpnreq
from v$session a,x$kglpn b
where a.saddr=b.kglpnuse
and b.kglpnmod<>0
and b.kglpnhdl in (select p1raw
from v$session_wait
where event like 'library%')
3.获得持有对象用户的执行代码
select sql_text
from v$sqlarea
where (v$sqlarea.address,v$sqlarea.hash_value
in (
select sql_address,sql_hash_value
from v$session
where sid in (
select sid from v$session a, x$kglpn b
where a.saddr=b.kglpnuse
and b.kglpnmod<>0
and kglpnhdl in (
select p1raw from v$session_wait
where event like 'library%')))
避免Library Cache Pin等待事件最好不要再session运行数据库对象时在session2中将该对象进行alter,grant,revoke操作(如果想更详细了解,请参阅《深入浅出Oracle--DBA入门,进阶与诊断案例》的第五章 Buffer Cache与Shared Pool原理) |
|