enq: SQ - contention 等待事件處理辦法

huangdazhu發表於2014-03-24

故障描寫:
2014-3-24
RAC資料庫,應用系統執行異常,登入不進

資料庫資訊檢視:
後臺CPU飆升厲害,資源使用過大。發現兩個節點鎖等待超過1100,並且還在不斷增長

解決辦法:
部分外來程式的kill,鎖等待消除。

分析報告:

我們可以透過分析故障前後的資料庫執行狀態來分析問題,比如:

故障時的資料庫狀態如下:


故障處理後的資料庫狀態:

故障發生時,p_pub_user_online_curd54分鐘被執行了83229次,相當於每秒26次;

故障處理後,p_pub_user_online_curd70分鐘執行了54562次,相當於每秒13次。

透過比較可以看到,故障時的系統負載比非故障時提高了一倍。

因為p_pub_user_online_curd(:1, :2, :3)儲存過程,涉及到序列SQ_MENULOGSQ_PUBLOGS的存取,由於序列的cache預設為20,所以在高併發的情況下,會導致enq:SQ-contention,大量的序列等待導致伺服器cpu飆高。這個從AWR報告中也有體現:



序列衝突引起的等待時間佔用了資料庫90%以上的CPU時間。

解決措施

1、  降低儲存過程p_pub_user_online_curd呼叫的頻率;

2、  SQ_MENULOGSQ_PUBLOGS的快取從20調整1000,執行語句如下:

alter sequence SQ_MENULOG cache 1000;

alter sequence SQ_PUBLOGS cache 1000;

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

相關文章