中止程式導致系統HANG住

yangtingkun發表於2012-03-07

以前在11g上碰到過一次類似的情況,由於ALTER SYSTEM KILL SESSION導致資源被完全佔用,在一段時間內資料庫處於HANG住狀態。這次又碰到類似的問題。

 

 

簡單描述一下問題產生的環境,使用者在進行測試,在很短的時間內連續啟動了多個應用伺服器,導致大量的併發程式同時連線到資料庫中,致使資料庫伺服器CPU利用率一下衝到100%

由於資料庫的這種狀態,使用者決定中止一些程式來釋放伺服器上的資源。但是透過kill -9alter system kill session殺掉大量的會話後,資料庫伺服器反而處於HANG死狀態,這時連sqlplus / as sysdba都無非正常登入。

於是使用者繼續透過kill -9清除所有非本地連線,到最後所有連線到資料庫的非本地連線已經完全被殺掉,而伺服器上的CPU資源已經下降,只有OraclePMON程式佔用了單CPU50%左右,其他CPU完全空閒。可是此時資料庫仍然無非正常登入。

此時只能透過sqlplus –prelim “/ as sysdba”方式登入,然後利用oradebug執行systemstatedump,檢視導致資料庫HANG死的原因。

檢查SYSTEMSTATEDUMP檔案,發現PMON程式和大量的DEAD程式都在經歷library cache: mutex X等待事件。而整個DUMP檔案中library cache: mutex X等待事件出現了3000多次。這個等待事件是不正常的。

查詢MOS發現果然是bugBug 9312879  "library cache: mutex x" waits after killing sessions / PMON slow to clean up。在11.1中,如果會話在KILL,那麼PMON程式可能在清除程式會話是出現異常,導致清除程式失敗後不斷嘗試,並最終產生這個問題。

這個BUG11.2.0.111.1.0.7.7中被fixed,而Oracle對於這個問題的臨時解決方案是不要kill會話。看來11.1版本和11.2相比確實是問題更多一些。

 

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

相關文章