buffer busy wait 等待事件說明(轉)
當會話想要訪問緩衝儲存器中的資料塊,而該資料塊正在被其它會話使用時產生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 在Oracle8及極其以後版本的資料庫裡,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語句。
◎ 緩衝區所屬的段。
--查詢等待塊型別
SELECT 'segment Header' CLASS,
a.Segment_Type,
a.Segment_Name,
a.Partition_Name
FROM Dba_Segments a,
V$session_Wait b
WHERE a.Header_File = b.P1
AND a.Header_Block = b.P2
AND b.Event = 'buffer busy waits'
UNION
SELECT 'freelist Groups' CLASS,
a.Segment_Type,
a.Segment_Name,
a.Partition_Name
FROM Dba_Segments a,
V$session_Wait b
WHERE b.P2 BETWEEN a.Header_Block + 1 AND (a.Header_Block + a.Freelist_Groups)
AND a.Header_File = b.P1
AND a.Freelist_Groups > 1
AND b.Event = 'buffer busy waits'
UNION
SELECT a.Segment_Type || ' Block' CLASS,
a.Segment_Type,
a.Segment_Name,
a.Partition_Name
FROM Dba_Extents a,
V$session_Wait b
WHERE b.P2 BETWEEN a.Block_Id AND a.Block_Id + a.Blocks - 1
AND a.File_Id = b.P1
AND b.Event = 'buffer busy waits'
AND NOT EXISTS (SELECT 1
FROM Dba_Segments
WHERE Header_File = b.P1
AND Header_Block = b.P2);
◆ 帶有原因碼130的資料塊(類#1)爭用
如果buffer busy waits的等待事件主要集中在資料塊(類#1)上,並且原因碼130,則
表明應用程式執行在同一時刻查詢相同資料集的多個會話,採用如下三件事最小化問題:
§減少併發級別或該表在執行現成直接內分割槽工作的方法。
§優化SQL語句,減少物理讀取和邏輯讀取的數量。
§增加freeLists和freeList Groups的數量。
◆ 帶有原因碼220的資料塊(類#1)爭用
多個會話同時在相同的物件上DML。採用如下三件事最小化問題:
§減少併發級別或改變劃分部分的方法。
§減少塊中行的數量。
§在另一個具有較小塊尺寸的表空間中重新構建物件(Oracle 9i或以上版本)。
可以使用較大的PCTFREE重新構建表或索引。可以使用命令改變表以最小化每個塊的最
小行數:
ALTER TABLE table_name MINIMIZE RECORDS_PER_BLOCK;
從Oracle 9i開始,可以在另外一個具有較小的塊尺寸的表空間中移動或重新構建物件。
雖然這些動作可以最小化buffer busy waits問題,但是他們無疑將增加全表掃描時間
和磁碟空間利用率。常言道,世上沒有免費的午餐。
◆ 資料段頭(類#4)的爭用
如果buffer busy waits的等待時間主要集中在資料段頭(即表或索引段頭,並且不是
插銷段頭)上,這意味著資料庫中的一些表或索引具有高段頭活動。如下解決問題:
§增加已經確定物件的程式FreeLists和FreeList Groups的數量。
§確保PctFree和PctUsed之間內的間隙不會太小。
§確保下一個區尺寸不會太小。
如果不希望混浠FreeLists和FreeList Groups,可以依靠自動段空間管理(Automatic
Segment Space Management,ASSM)特性,以分散從插入語句中引入的資料(9i特性)。
◆ 撤消段都(類#17)的爭用
如果buffer busy waits等待時間主要集中在撤消段頭上,這表明資料庫中的回滾段
過少,或者他們的尺寸太小,從而造成對段頭的頻繁更新。如果在Oracle 9i中引入的系
統管理撤消,就不需要處理這種問題,因為Oracle將根據需要增加額外的撤消段。
◆ 撤消塊的爭用(類#18)
如果buffer busy waits等待時間主要集中在撤消塊上,這通常意味著多個併發會話同
時查詢更新的資料。當應用程式可以在不同的時間內查詢和DML時,這種問題就不會存在。
◆ 系統級診斷
--檔案等待次數
SELECT b.File_Id,
b.File_Name,
a.COUNT
FROM X$kcbfwait a,
Dba_Data_Files b
WHERE a.Indx = b.File_Id-1
AND a.COUNT > 0
ORDER BY a.COUNT;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242387/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【WAIT】 log file sync等待事件說明AI事件
- 【TUNE_ORACLE】等待事件之“buffer busy waits”Oracle事件AI
- Oracle10g等待事件型別wait_class說明Oracle事件型別AI
- [20180305]手工模擬buffer busy wait.txtAI
- oracle buffer busy waits等待的含義OracleAI
- Buffer Cache以及buffer busy waits/gc相關事件AIGC事件
- gc current/cr block busy等待事件GCBloC事件
- gc buffer busyGC
- [異常等待事件rdbms ipc reply]-分析說明事件
- Oracle Buffer Busy WaitsOracleAI
- oracle等待事件之cursor:pin S wait on XOracle事件AI
- 常見的wait等待事件及處理(zt)AI事件
- Latch free等待事件(轉)事件
- 33、buffer_cache_3(redo的產生、LRBA、buffer cache裡的等待事件)事件
- Latch free等待事件四(轉)事件
- Latch free等待事件三(轉)事件
- Latch free等待事件二(轉)事件
- buffer busy waits引起的會話突增AI會話
- gc buffer busy acquire問題處理GCUI
- GC Buffer Busy Waits in RAC: Finding Hot BlocksGCAIBloC
- 等待事件wait for a undo record 與 fast_start_parallel_rollback引數事件AIASTParallel
- [重慶思莊每日技術分享]-free buffer waits 等待事件AI事件
- Buffer Busy Waits是怎麼產生的?AI
- XTTS全備開啟BCT後等待事件 block change tracking buffer spaceTTS事件BloC
- 轉換說明
- Solidity事件,等待事件Solid事件
- 基於等待事件的效能診斷(轉)事件
- 一次gc buffer busy問題的診斷GC
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- DB BUFFER LRU 列表的latch等待
- 舉例說明js滑鼠事件有哪些?JS事件
- 轉載:__builtin_expect 說明UI
- Selenium等待事件Waits事件AI
- read by other session等待事件Session事件
- log file sync等待事件事件
- ORACLE 常見等待事件Oracle事件
- latch等待事件彙總事件
- gc cr request等待事件GC事件