概述
---------------------
gc buffer busy是RAC數(shù)據(jù)庫中常見的等待事件,11g開始gc buffer busy分為gc buffer busy acquire和gc buffer busy release。
gc buffer busy acquire是當(dāng)session#1嘗試請求訪問遠(yuǎn)程實(shí)例(remote instance) buffer,但是在session#1之前已經(jīng)有另外一個(gè)session#2請求訪問了相同的buffer,并且沒有完成,那么session#1等待gc buffer busy acquire。
gc buffer busy release是在session#1嘗試請求訪問本地實(shí)例buffer時(shí),發(fā)現(xiàn)之前已經(jīng)有遠(yuǎn)程實(shí)例的session#2請求訪問該buffer,并且沒有完成,那么session#1等待gc buffer busy release。
原因/解決方法
---------------------
- 熱點(diǎn)塊(hot block)
在AWR中Segments by Global Cache Buffer Busy 記錄了訪問頻繁的gc buffer.
解決方法可以根據(jù)熱點(diǎn)塊的類型采取不同的解決方法,比如采取分區(qū)表,分區(qū)索引,反向index等等。這點(diǎn)與單機(jī)數(shù)據(jù)庫中的buffer busy waits類似。
- 低效SQL語句
低效SQL語句會(huì)導(dǎo)致不必要的buffer被請求訪問,增加了buffer busy的機(jī)會(huì)。在AWR中可以找到TOP SQL。解決方法可以優(yōu)化SQL語句減少buffer訪問。這點(diǎn)與單機(jī)數(shù)據(jù)庫中的buffer busy waits類似。
- 數(shù)據(jù)交叉訪問。
RAC數(shù)據(jù)庫,同一數(shù)據(jù)在不同數(shù)據(jù)庫實(shí)例上被請求訪問。
如果應(yīng)用程序可以實(shí)現(xiàn),那么我們建議不同的應(yīng)用功能/模塊數(shù)據(jù)分布在不同的數(shù)據(jù)庫實(shí)例上被訪問,避免同一數(shù)據(jù)被多個(gè)實(shí)例交叉訪問,可以減少buffer的爭用,避免gc等待。
- Oracle bug
建議安裝Oracle推薦的最新Patch Set和PSU。
Patch set和PSU信息請參考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)
案例分享
---------------------
一個(gè)gc buffer busy acquire的案例,和大家分享一下。
- 應(yīng)用端反映業(yè)務(wù)處理異常,數(shù)據(jù)庫hang,在第一時(shí)間現(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個(gè)以上的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'
創(chuàng)新互聯(lián)建站長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為武岡企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、做網(wǎng)站,武岡網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
2. session#931,serial#39657 也是處于等待狀態(tài),等待事件是'gc buffer busy acquire',而'gc buffer busy
acquire'的持有者是session#1324,serial#22503
3. session#1324,serial#22503 也是處于等待狀態(tài),等待事件是'gc current request'
通過分析dba_hist_active_sess_history,也可以得到session等待關(guān)系:
'gc current request'<='gc buffer busy acquire'<='enq: TA - contention'
這個(gè)等待關(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臨時(shí)規(guī)避這個(gè)問題。
另外,在11.2低版本中也有些類似的已知問題,建議安裝最新patch set (11.2.0.3/4) + 最新PSU 。
Patch set和PSU信息請參考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)
網(wǎng)頁題目:RAC性能分析-gcbufferbusyacquire等待事件
本文來源:http://jinyejixie.com/article14/gpijge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、小程序開發(fā)、App設(shè)計(jì)、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)