某個用戶做分析表的操作時進程被阻塞library cache lock引起阻塞的進程也就是普通的查詢該表的語句
原因是有很多這個表相關的SQL在執行產生這方面的沖突分析的時候要修改相關的統計數據而統計數據對於SQL分析是有影響的如果一個SQL在執行過程中是不允許修改和表相關的一些信息的
如果系統hang住了可以使用oradebug做一個HANGANALYZE來分析
HANGANALYZE是系統級的分析屬於輕量級分析不會對系統產生影響
例如做一個級的分析
做的方法分兩部
在SQLPLUS裡用SYS賬號
oradebug setmypid
oradebug hanganalyze
之後將會生成一個trace報告例如以下內容
==============
HANG ANALYSIS:
==============
Open chains found:
Chain : <sid/sess_srno/proc_ptr/ospid/wait_event> :
<//xed//PX Deq: Join ACK>
<//xedd//library cache pin>
Chain : <sid/sess_srno/proc_ptr/ospid/wait_event> :
<//xedb//No Wait>
Chain : <sid/sess_srno/proc_ptr/ospid/wait_event> :
<//xedc//No Wait>
說明
nodenum定義每個session的序列號
sidsession的sid
sess_srnosession的Serial#
ospidOS的進程ID
statenode的狀態
adjlist表示blocker node
predecessor表示waiter node
示例中SID=的就是被HANG主的會話SID=就是阻塞者
Sid=的這個進程掛死了但是他持有了library cache pin所以阻塞了殺掉(OSPID=)就解決問題了
而後根據等待事件的信息具體原因具體分析
HANGANALYZE報告裡的阻塞有可能是HANG住也有可能只是由於比較慢引起的所以在分析的時候可以做一個HANGANALYZE然後隔幾分鐘再做一次兩次對比著看如果是比較慢引起的兩次報告的情況會發生變化如果是HANG住了是不會變化的
From:http://tw.wingwit.com/Article/program/Oracle/201311/17196.html