等待事件--library cache pin

linfeng_oracle發表於2013-08-09
等待事件--library cache pin
 
        這個等待事件和library cache lock 一樣是發生在共享池中併發操作引起的事件。通常來講,如果Oracle 要對一些PL/SQL 或者檢視這樣的物件做重新編譯,需要將這些物件pin到共享池中。 如果此時這個物件被其他的使用者特有,就會產生一個library cache pin的等待。
 
        這個等待事件包含四個引數:
P1--handle address: 被載入的物件的地址。
P2--pin address: 鎖的地址。
P3--100*mode+namespace: 被載入物件的資料片段+被載入物件在v$db_object_cache 檢視中namespace名稱。
 
        P1,P2可與x$kglpn和x$kglob表相關:
X$KGLOB (Kernel Generic Library Cache Manager Object)
X$KGLPN (Kernel Generic Library Cache Manager Object Pins)

-- 查詢X$KGLOB,可找到相關的object,其SQL語句如下
(即把V$SESSION_WAIT中的P1raw與X$KGLOB中的KGLHDADR相關連)
select kglnaown,kglnaobj from X$KGLOB
where KGLHDADR =(select p1raw from v$session_wait
where event='library cache pin');

-- 查出引起該等待事件的阻塞者的sid
select sid from x$kglpn , v$session
where KGLPNHDL in
(select p1raw from v$session_wait
where wait_time=0 and event like 'library cache pin%')
and KGLPNMOD <> 0
and v$session.saddr=x$kglpn.kglpnuse;

-- 查出阻塞者正執行的SQL語句
select sid,sql_text
from v$session, v$sqlarea
where v$session.sql_address=v$sqlarea.address
and sid=;
這樣,就可找到"library cache pin"等待的原因,從而解決由此引起的效能問題。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24996904/viewspace-768120/,如需轉載,請註明出處,否則將追究法律責任。

相關文章