溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-08-11 17:00:42 來源:ITPUB博客 閱讀:172 作者:531968912 欄目:關(guān)系型數(shù)據(jù)庫

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


概述
---------------------
gc buffer busyRAC數(shù)據(jù)庫中常見的等待事件,11g開始gc buffer  busy分為gc buffer busy acquiregc buffer  busy release。

gc buffer busy acquire是當session#1嘗試請求訪問遠程實例(remote  instance) buffer,但是在session#1之前已經(jīng)有另外一個session#2請求訪問了相同的buffer,并且沒有完成,那么session#1等待gc buffer busy acquire。

gc buffer busy release是在session#1嘗試請求訪問本地實例buffer時,發(fā)現(xiàn)之前已經(jīng)有遠程實例的session#2請求訪問該buffer,并且沒有完成,那么session#1等待gc buffer busy release。

原因/解決方法
---------------------
熱點塊(hot block)
AWRSegments by Global Cache Buffer Busy 記錄了訪問頻繁的gc buffer.
解決方法可以根據(jù)熱點塊的類型采取不同的解決方法,比如采取分區(qū)表,分區(qū)索引,反向index等等。這點與單機數(shù)據(jù)庫中的buffer busy waits類似。

低效SQL語句
低效SQL語句會導(dǎo)致不必要的buffer被請求訪問,增加了buffer busy的機會。在AWR中可以找到TOP SQL。解決方法可以優(yōu)化SQL語句減少buffer訪問。這點與單機數(shù)據(jù)庫中的buffer busy waits類似。

數(shù)據(jù)交叉訪問。
RAC數(shù)據(jù)庫,同一數(shù)據(jù)在不同數(shù)據(jù)庫實例上被請求訪問。
如果應(yīng)用程序可以實現(xiàn),那么我們建議不同的應(yīng)用功能/模塊數(shù)據(jù)分布在不同的數(shù)據(jù)庫實例上被訪問,避免同一數(shù)據(jù)被多個實例交叉訪問,可以減少buffer的爭用,避免gc等待。

- Oracle bug
建議安裝Oracle推薦的最新Patch SetPSU。
Patch setPSU信息請參考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)

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

- 應(yīng)用端反映業(yè)務(wù)處理異常,數(shù)據(jù)庫hang,在第一時間現(xiàn)場DBA收集了hanganalyze (hanganalyze對于分析數(shù)據(jù)庫hang非常重要)

RAC數(shù)據(jù)庫收集hanganalyze的命令:
SQL> conn / as sysdba
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug -g all hanganalyze 3

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

Chain 1 Signature: 'gc current request'<='gc buffer busy acquire'<='enq: TX -  contention'
Chain 2 Signature: 'gc current request'<='gc buffer busy  acquire'<='buffer busy waits'

Chain 1243 Signature: 'gc current request'<='gc buffer busy  acquire'<='enq: TA - contention'
Chain 1244 Signature: 'gc current request'<='gc buffer busy  acquire'<='enq: TA - contention'

Hanganalyze說明數(shù)據(jù)庫中大部分session直接或者間接等待'gc  current request'<='gc buffer busy acquire'。

- 有些情況下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: 'gc current request'<='gc buffer busy acquire'
Chain 1 Signature Hash: 0x8823aa2a 

- 有些情況下dba_hist_active_sess_history也會記錄hang信息。
1. 在數(shù)據(jù)庫hang的時間段內(nèi),有691個session在等待'enq: TA - contention','enq: TA - contention'的持有者是session#931,serial#39657

RAC性能分析 - gc buffer busy acquire 等待事件
2. session#931,serial#39657  也是處于等待狀態(tài),等待事件是'gc buffer busy acquire',而'gc buffer busy
acquire'
的持有者是session#1324serial#22503

RAC性能分析 - gc buffer busy acquire 等待事件
3. session#1324,serial#22503  也是處于等待狀態(tài),等待事件是'gc current request'

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

通過分析dba_hist_active_sess_history,也可以得到session等待關(guān)系:
'gc current request'<='gc buffer busy  acquire'<='enq: TA - contention'
這個等待關(guān)系與hanganalyze是一致的。

- 根據(jù)以上分析得到session等待關(guān)系,可以確定數(shù)據(jù)庫hang的原因是oracle已知問題Bug
13787307 - Hang in RAC with 'gc current request'<='gc buffer busy acquire'  signature.


- 解決方法:
安裝Patch 13787307 或者 設(shè)置_gc_bypass_readers=false臨時規(guī)避這個問題。
另外,在11.2低版本中也有些類似的已知問題,建議安裝最新patch set (11.2.0.3/4) + 最新PSU 
Patch setPSU信息請參考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI