查詢Library Cache Pin等待原因

passion_of_data發表於2011-07-28

當我們查詢v$session_wait時如果發現有大量library cache pin等待事件,此時要怎樣去找出library cache pin等待的具體是什麼呢?

下面就library cache pin等待事件做個介紹:

library cache pin是用來管理Library Cache的併發訪問的,pin一個Object會引起相應的heap被載入記憶體中(如果此前沒有被載入),pins可以在以下三個模式下得到:NullShareExclusive,可以把pin看做是一種特定形式的鎖。

       Library Cache Pin等待事件出現時,通常說明該pin被其他使用者以非相容模式持有。

Library Cache Pin的等待事件為3秒,其中有1秒用於PMON後臺程式。

Library Cache Pin的引數如下,有用的主要是P1P2

*P1 --------------------KGL Handle address

*P2 --------------------Pin address

*P3 --------------------Encoded Mode & Namespace

 

下面去查詢library cache pin原因

1、 獲得library cache pin等待的物件

  SELECT addr, kglhdadr, kglhdpar, kglnaown, kglnaobj, kglnahsh, kglhdobj

        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 b.kglpnhdl IN (SELECT p1raw

   FROM v$session_wait    WHERE event LIKE 'library%')));

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

相關文章