等待事件 二
接著上次的等待事件的介紹,以後主要介紹等待事件的描述,原因,診斷
.Buffer busy wait
1、ORACLE會話正在等待PIN住一個緩衝區,會話必須在讀取或修改緩衝區之前將該緩衝區PIN住。
2、在任何時侯只有一個程式可以PIN住一個緩衝區。
3、buffer busy waits表明讀/讀、讀/寫、寫/寫爭用。
4、根據P3中指明的原因碼有不同的處理方式
一 現象描述及問題的原因:
在SGA中讀取或修改緩衝區會話的,必須要先獲取cahce buffers chains鎖存器,然後遍歷這個緩衝區鏈,直到發現它需要的緩衝區頭。然後以共享方式或獨佔方式獲取該緩衝區鎖或緩衝區頭部的PIN,一旦緩衝區被PIN住,會話即釋放cache buffers chains鎖存器。如果無法獲得PIN,會話就在buffer busy waits等待事件上等待。這種等待事件不會應用於會話的私有PGA中執行的讀取或寫入操作。
二,診斷:
處理該等待事件時主要注意以下四方面:
1) 該等待事件主要的原因碼是什麼?(引數P3)
2) buffer busy waits事件需要的塊類?(由P1即可找出等待塊的類列)
3) 緩衝區所屬的段(由P1和P2引數配合檢視v$extents即可找出等待塊的所屬段)
select s.segment_name, s.partition_name
from dba_extents s
where
帶有原因碼130的資料塊(類#1)爭用
1) 等待集中在資料塊上,並且原因碼是130,則意味著多個會話併發請求相同的資料塊,但該資料塊並不在緩衝儲存器中,並且必須從磁碟讀取。
2) 當多個會話請求不在緩衝儲存器中的相同資料塊時,ORACLE可以聰明地防止每個會話進行相同的作業系統I/O呼叫。否則,這可能嚴重地增加系統I/O的數量,所以,ORACLE只允許一個會話執行實際的I/O,而其他的會話在buffer busy waits上等待塊,執行I/O的會話在db file sequential read或db file scattered read等待事件上等待。
3) 可在v$session檢視中檢查SESSION的註冊時間,並且等待事件db file sequential(scattered) read和buffer busy waits等待相同的檔案號和塊號。
4) 解決方法:最佳化SQL語句,儘可能地減少邏輯讀和物理讀;
帶有原因碼220的資料塊(類#1)爭用
(1) 等待集中在資料塊上,並且原因碼是220,則意味著多個會話同時在相同的物件上執行DML(相同塊中的不同行)。
(2) 如果資料塊的尺寸較大(>=16K),則可能強化這種現象,因為較大的塊一般在每個塊中包含更多的行。
(3) 減少這種情況的等待的方法:減少併發;減少塊中行的數量;在另一個具有較小塊尺寸的表空間中重新構建物件。
(4) 具體方法說明:
使用較大的PCTFREE重新構建表或索引;
使用alter table
從ORACLE9i開始,可以在另一個具有較小塊尺寸的表空間中移動或重新構建物件。
注:雖然這些方法可以最小化buffer busy waits問題,但它們無疑會增加全表掃描時間和磁碟空間利用率。
資料段頭(類#4)的爭用
(1) 如果buffer busy waits的等待事件主要集中在資料段頭(即表或索引段頭,並且不是UNDO段頭)上,這意味著資料庫中一些表或索引有高段頭活動。
注:程式出於兩個主要原因訪問段頭,一是,獲得或修改FREELISTS資訊;二是,為了擴充套件高水位標記(HWM)。
(2) 減少這種情況的等待的方法:
>> 對使用自由表進行段管理的表,增加確認物件的FREELISTS和FREELIST GROUPS(注:FREELIST GROUPS的增加也是必須的);
>> 確保FCTFREE和PCTUSED之間的間隙不是太小,從而可以最小化FREELIST的塊迴圈。
>> 下一區的尺寸不能太小,當區高速擴張時,建立的新區需要修改在段頭中區對映表。可以考慮將物件移動到合理的、統一尺寸的本地管理的表空間中。
撤銷段頭(類#17)的爭用
(1) 如果buffer busy waits等待事件主要集中在撤銷段頭,這表明資料庫中的回滾段過少或者是它們的區尺寸太小,從而造成對段頭的頻繁更新。如果使用ORACLE9I的由資料庫系統管理UNDO段,就不需要處理這種問題,因為ORACLE會根據需要增加額外的的UNDO段。
(2) 可以建立並啟用私有回滾段,以減少每個回滾段的事務數量。需要修改init.ora檔案中的ROLLBACK_SEGMENTS引數。
(3) 如果使用公用回滾段可以減少初始化引數transactions_per_rollback_segment的值,ORACLE透過transactions/transactions_per_rollback_segment來獲取公有回滾段的最小數量。
撤銷塊的爭用(類#18)
(1) 如果buffer busy waits等待事件主要集中在撤銷塊上,這表明有多個併發會話為保證一致性讀同時查詢更新的資料。
(2) 這是應用程式存在問題,當應用程式在不同時間內執行查詢和DML時,這種問題不會存在。
三 附註:
一、檢視系統所有段的有關buffer busy waits事件的統計:
SELECT *
FROM v$segment_statistics s
WHERE s.statistic_name = 'buffer busy waits'
AND s.owner <> 'SYS'
二。跟蹤buffer busy waits 的幾個檢視
X$KCBFWAIT (核心快取記憶體緩衝區檔案等待)透過資料庫檔案跟蹤該事件,
select b.file_id,b.file_name,a.count
from X$KCBFWAIT a,dba_data_files b
where a.index=b.file_id-1
and a.cout>0
order by a.count;
四,參考資料
《oracle wait inerface 效能診斷與調整實踐指南 》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-659563/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【效能調整】等待事件(四) 常見等待事件(二)事件
- Latch free等待事件二事件
- 【等待事件之二】log 相關的等待事件
- Latch free等待事件二(轉)事件
- 【效能調整】等待事件(二)事件
- 【等待事件】ORACLE常見等待事件事件Oracle
- 【等待事件】等待事件系列(5.1)--Enqueue(佇列等待)事件ENQ佇列
- 等待事件事件
- Solidity事件,等待事件Solid事件
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- 等待事件分析事件
- oracle等待事件Oracle事件
- Oracle 等待事件Oracle事件
- px等待事件事件
- 【等待事件】等待事件系列(1)--User I/O型別事件型別
- 【效能調整】等待事件(三) 常見等待事件(一)事件
- 等待事件在10G中的加強(二)事件
- Oracle Mutex 等待事件OracleMutex事件
- 等待事件指令碼事件指令碼
- oracle等待事件一Oracle事件
- ASH, AWR , 等待事件事件
- latch free等待事件事件
- 【Oracle概念】-等待事件Oracle事件
- 頂級等待事件:事件
- Oracle 等待事件 一Oracle事件
- Oracle的等待事件Oracle事件
- 常見等待事件事件
- db file sequential read wait event等待事件之二AI事件
- oracle等待事件3構造一個Direct Path write等待事件和構造一個Log File Sync等待事件Oracle事件
- Latch free等待事件(轉)事件
- gc cr request等待事件GC事件
- latch等待事件彙總事件
- log file sync等待事件事件
- 【等待事件】log file sync事件
- ORACLE 常見等待事件Oracle事件
- cursor: mutex S等待事件Mutex事件
- latch 相關等待事件事件
- 【等待事件】Buffer Exterminate事件