天天看點

RAC性能分析gc buffer busy acquire 等待事件

概述

---------------------

gc buffer busy是RAC資料庫中常見的等待事件,11g開始gc buffer  busy分為gc buffer busy acquire和gc buffer  busy release。

gc buffer busy acquire是當session#1嘗試請求通路遠端執行個體(remote  instance) buffer,但是在session#1之前已經有相同執行個體上另外一個session#2請求通路了相同的buffer,并且沒有完成,那麼session#1等待gc buffer busy acquire。

gc buffer busy release是在session#1之前已經有遠端執行個體的session#2請求通路了相同的buffer,并且沒有完成,那麼session#1等待gc buffer busy release。

原因/解決方法

- 熱點塊(hot block)

在AWR中Segments by Global Cache Buffer Busy 記錄了通路頻繁的gc buffer.

解決方法可以根據熱點塊的類型采取不同的解決方法,比如采取分區表,分區索引,反向index等等。這點與單機資料庫中的buffer busy waits類似。

<b></b>

- 低效SQL語句

低效SQL語句會導緻不必要的buffer被請求通路,增加了buffer busy的機會。在AWR中可以找到TOP SQL。解決方法可以優化SQL語句減少buffer通路。這點與單機資料庫中的buffer busy waits類似。

- 資料交叉通路。

RAC資料庫,同一資料在不同資料庫執行個體上被請求通路。

如果應用程式可以實作,那麼我們建議不同的應用功能/子產品資料分布在不同的資料庫執行個體上被通路,避免同一資料被多個執行個體交叉通路,可以減少buffer的争用,避免gc等待。

- Oracle bug

建議安裝Oracle推薦的最新Patch Set和PSU。

Patch set和PSU資訊請參考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)

案例分享

一個gc buffer busy acquire的案例,和大家分享一下。

- 應用端反映業務處理異常,資料庫hang,在第一時間現場DBA收集了hanganalyze (hanganalyze對于分析資料庫hang非常重要)

RAC資料庫收集hanganalyze的指令:

SQL&gt; conn / as sysdba

SQL&gt; oradebug setmypid

SQL&gt; oradebug unlimit

SQL&gt; oradebug -g all hanganalyze 3

通過hanganalyze我們可以比較容易看到有1000個以上的Chain都有類似的等待關系,比如:

Chain 1 Signature: 'gc current request'

Chain 2 Signature: 'gc current request'

Chain 1243 Signature: 'gc current request'

Chain 1244 Signature: 'gc current request'

Hanganalyze說明資料庫中大部分session直接或者間接等待'gc  current request'

- 有些情況下dia0 trace檔案也會記錄hang資訊

  inst# SessId  Ser#     OSPID PrcNm Event

  ----- ------ ----- --------- ----- -----

      1   1152     3  21364904    FG gc buffer busy acquire

      1   2481     3  26607642    FG gc current request

Chain 1 Signature Hash: 0x8823aa2a 

- 有些情況下dba_hist_active_sess_history也會記錄hang資訊。

1. 在資料庫hang的時間段内,有691個session在等待'enq: TA - contention','enq: TA - contention'的持有者是session#931,serial#39657

2. session#931,serial#39657  也是處于等待狀态,等待事件是'gc buffer busy acquire',而'gc buffer busy

acquire'的持有者是session#1324,serial#22503

3. session#1324,serial#22503  也是處于等待狀态,等待事件是'gc current request'

通過分析dba_hist_active_sess_history,也可以得到session等待關系:

'gc current request'

這個等待關系與hanganalyze是一緻的。

- 根據以上分析得到session等待關系,可以确定資料庫hang的原因是oracle已知問題Bug

13787307 - Hang in RAC with 'gc current request'

- 解決方法:

安裝Patch 13787307 或者 設定_gc_bypass_readers=false臨時規避這個問題。

另外,在11.2低版本中也有些類似的已知問題,建議安裝最新patch set (11.2.0.3/4) + 最新PSU 。

閱讀(4321) | 評論(0) | 轉發(0) |

相關熱門文章

<a href="http://blog.itpub.net/31397003/viewspace-2137245/">database link概述</a>

<a href="http://blog.itpub.net/15498/viewspace-2137194/">機房搬遷的流程</a>

<a href="http://blog.itpub.net/30192548/viewspace-2137172/">log file sync等待事件的成因...</a>

<a href="http://blog.itpub.net/29578568/viewspace-2137160/">親曆dataguard的一些經驗問答...</a>

<a href="http://blog.itpub.net/31397003/viewspace-2137150/">oracle之hint概述</a>

<a href="/143904/viewspace-862876/">ORACLE 變異表解決方法</a>

<a href="/166555/viewspace-783548/">ORA-00600錯誤分析</a>

<a href="/18576/viewspace-794941/">初識ORACLE的審計功能</a>

<a href="/23623/viewspace-793739/">Oracle的OLEDB</a>

<a href="/128503/viewspace-829495/">學ORACLE随筆</a>

<a href="http://www.itpub.net/thread-2095453-1-1.html">PL/SQL Challenge 每日一題:2...</a>

<a href="http://www.itpub.net/thread-2095443-1-1.html">如何讀懂SQL PROFILE 裡産生的...</a>

<a href="http://www.itpub.net/thread-2095459-1-1.html">如何調用标準程式列印财務憑證...</a>

<a href="http://www.itpub.net/thread-2095482-1-1.html">關于Query查詢到資料不全的問...</a>

<a href="http://www.itpub.net/thread-2095420-1-1.html">mysql查詢information_schema...</a>