Oracle資料庫buffer busy wait等待事件 (1)

idba發表於2008-04-18

當會話意圖訪問緩衝儲存器中的資料塊,而該資料塊正在被其它會話使用時產生buffer busy waits事件。其它會話可能正在從資料檔案向緩衝區儲存器度曲同樣的資料塊,或正在緩衝儲存器中對其進行修改。

為了確保讀取器會話擁有與獲得所有更改或無更改的資料塊一致的映像,正在修改該資料塊的會話在其標題中標記一個標誌,讓其他會話知道有一個更改正在進行而等候更改的的完成。

檢視v$waitstat不是OWI的元件,但其為沒一類緩衝區提供了有用的等待統計。遭遇buffer busy等待事件最常見的緩衝區類為塊、段標題、撤消塊、撤消標題。

顯示一個查詢v$waitstat檢視的取樣輸出:

具體示例如下:

SELECT * FROM V$waitstat WHERE COUNT>0;

CLASS COUNT TIME

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

data block 4170082 1668098

segment header 116 98

undo header 916 1134

undo block 2087 1681

1、等待引數

buffer wait busy的等待引數描述如下:

P1 在Oracle 8及其以後版本的資料庫裡,P1顯示詢問資料塊駐留的絕對檔案號。

P2 程式需要訪問的實際塊號。

P3 在Oracle10g以前的版本中,著是表示等待原因的數字。Oracle在內河程式碼中在

多個地方用不同的原因碼提交。該原因碼取決於版本。

2、等待時間

100釐秒或1秒。

· Oracle會話正在等待釘住一個緩衝區。必須在讀取或修改緩衝區前將它釘住。在任何

時刻只有一個程式可以釘住一個緩衝區。

·buffer busy waits表明讀/讀、讀/寫、寫/寫爭用。

·採取的適當措施取決於P3引數中的原因碼。

在SGA中讀取或修改緩衝區的會話必須首先獲取cache buffers chains鎖存器,並且遍歷

這個緩衝區鏈,直到他發現必需的緩衝區頭。然後,他必須以共享模式或獨佔模式獲取

一個緩衝區鎖或緩衝區頭上的pin,這取決於他計劃的操作。一旦緩衝區頭被釘住,會話

就釋放cache buffers chains鎖存器,並在緩衝區自身上執行計劃的操作。如果無法獲

取一個pin,會話就在buffer busy waits等待事件上等待。這種等待時間不會應用於在

會話的私有PGA中執行的讀取或寫入操作。

3、診斷的原因、診斷和動作

·表示為什麼程式無法獲得一個緩衝區pin的主要原因碼。

·buffer busy waits等待時間需要的塊類。

·和buffer busy waits時間相關的SQL語句。

·緩衝區所屬的段。

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

相關文章