【TUNE_ORACLE】等待事件之“buffer busy waits”
定義
當會話想要訪問緩衝區快取中的資料庫塊但由於緩衝區“繁忙”而無法訪問時,會發生這種等待。 可能發生這種情況的兩種主要情況是:
1. 當一個會話將資料塊從磁碟讀到記憶體中,發現記憶體沒有空閒的記憶體塊。
2. 發生一致性讀時,由於需要建立某個時刻的前映象,就需要在記憶體中申請記憶體塊,如果沒有空閒的記憶體塊,就會發生該等待事件。
當資料庫中存在熱塊時,即使用者頻繁讀取或者修改某個資料塊時,會發生該等待事件。
對於自身範圍內產生的等待
1. 檢視動態效能檢視V$SESSION_WAIT涉及到的“buffer busy waits”引數
P1 = file#
P2 = block#
P3 = id
注:
file#:包含等待會話所需塊的資料檔案的檔案號。
block#:等待會話想要訪問file#中的塊號。
id:官方釋義如下
2. 等待時間
正常等待時間為1秒。如果會話在上次等待期間一直在等待獨佔緩衝區,那麼它將等待3秒。會話將保持超時/等待,直到它申請到緩衝區。
3. 尋找“Blockers”
找到阻塞過程可能非常困難,因為所需的資訊沒有外化。如果P3顯示“buffer busy waits”正在等待塊讀取完成,則阻塞會話可能正在等待I/O等待(例如:“db file sequential read”或“db file scattered read”)用於相同的file#和block#。
如果等待是由於緩衝區處於不相容模式,那它應該很快被釋放。
對於系統範圍內產生的等待
如果等待緩衝區所非常耗時,那麼最好確定哪個段正在發生爭用。Bstat/estat或STATSPACK報告的“緩衝區繁忙等待統計”部分顯示了哪些塊型別看到最多的爭用。使用以下SQL查詢等待時間最多的塊:
SELECT time, count, class FROM V$WAITSTAT ORDER BY time,count;
使用以下SQL檢視發生等待時塊的儲存位置:
SELECT kcbwhdes, why0+why1+why2 "Gets", "OTHER_WAIT" FROM x$kcbsw s, x$kcbwh w WHERE s.indx=w.indx and s."OTHER_WAIT">0 ORDER BY 3;
用下面的SQL可以檢視等待最多的檔案,因此通過組合上述資訊,我們知道哪個檔案中的什麼塊型別導致等待:
SELECT count, file#, name FROM x$kcbfwait, v$datafile WHERE indx + 1 = file# ORDER BY count;
可以使用如下查詢檢視每個檔案中的段:
SELECT distinct owner, segment_name, segment_type FROM dba_extents WHERE file_id= &FILE_ID;
如果列出的型別有大量段,可重複執行以下語句並收集輸出,並每經過一段時間對結果進行排序以檢視哪些檔案和塊顯示爭用:
SELECT p1 "File", p2 "Block", p3 "Reason" FROM v$session_wait WHERE event='buffer busy waits';
減少等待和等待時間的方法
由於該等待事件是由於對特定塊的爭用,所以消除塊的爭用的原因是最好的方式。 請注意,資料塊的“buffer busy waits”通常是由於多個程式重複讀取相同的塊(例如:如果很多人掃描相同的索引),第一個會話快速處理緩衝區快取中的塊,然後塊必須從磁碟讀取。其他會話(掃描相同的索引)快速“趕上”並想要當前正在從磁碟讀取的塊,他們會等待緩衝區騰出空間,因為有人已經在讀取該塊。
對特定型別的爭用可以參考以下方法來減少爭用:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2784109/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle buffer busy waits等待的含義OracleAI
- Buffer Cache以及buffer busy waits/gc相關事件AIGC事件
- Oracle Buffer Busy WaitsOracleAI
- buffer busy wait 等待事件說明(轉)AI事件
- buffer busy waits引起的會話突增AI會話
- GC Buffer Busy Waits in RAC: Finding Hot BlocksGCAIBloC
- Buffer Busy Waits是怎麼產生的?AI
- Selenium等待事件Waits事件AI
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- [重慶思莊每日技術分享]-free buffer waits 等待事件AI事件
- 【TUNE_ORACLE】等待事件之IO等待“read by other session”Oracle事件Session
- 【TUNE_ORACLE】等待事件之IO等待“direct path read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path write”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“db file scattered read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path write temp”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“db file sequential read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“db file parallel write”Oracle事件Parallel
- 【TUNE_ORACLE】等待事件之“library cache lock”Oracle事件
- 【TUNE_ORACLE】等待事件之“library cache pins”Oracle事件
- gc current/cr block busy等待事件GCBloC事件
- Cursor Mutex S Waits等待事件引發hangMutexAI事件
- gc buffer busyGC
- 【TUNE_ORACLE】等待事件之日誌等待“log file sync”Oracle事件
- Oracle Free Buffer WaitsOracleAI
- 【TUNE_ORACLE】等待事件之日誌等待“log file parallel write”Oracle事件Parallel
- Oracle 19c中的等待事件分類 Event WaitsOracle事件AI
- Oracle優化案例-Bug 5552515引起的buffer busy waits和表物理讀(二十四)Oracle優化AI
- 33、buffer_cache_3(redo的產生、LRBA、buffer cache裡的等待事件)事件
- gc buffer busy acquire問題處理GCUI
- [20180305]手工模擬buffer busy wait.txtAI
- XTTS全備開啟BCT後等待事件 block change tracking buffer spaceTTS事件BloC
- Oracle等待事件之enq: TM – contentionOracle事件ENQ
- oracle等待事件之enq: CF – contentionOracle事件ENQ
- Solidity事件,等待事件Solid事件
- 一次gc buffer busy問題的診斷GC
- DB BUFFER LRU 列表的latch等待
- oracle等待事件之cursor:pin S wait on XOracle事件AI
- Python Selenium等待(waits)頁面載入完成的三種方法PythonAI