萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> Oracle數據庫緩沖區忙等待的原因解析

Oracle數據庫緩沖區忙等待的原因解析

眾多Oracle有關問題中,其中最重要的一個是緩沖區忙等待(buffer busy wait)事件。

緩沖區忙等待是I/O-bound Oracle系統中最常見的現象,尤其是在Oracle STATSPACK報告的前五個忙等待的讀(順序/分散)系統中,如前5個定時事件:% 總和事件等待  時間(s)消逝時間
--------------------------- ------------ ----------- -----------
db文件順序讀 2,5987,146  48.54
db文件分散讀25,5193,246  22.04
庫緩沖區載入死鎖6731,3639.26
CPU時間 2,154 9347.83
日志文件平行寫  19,157 8375.68

減輕緩沖區忙等待的主要方式是減少系統中的I/O,這可以通過SQL使用更少的塊讀(block reads,比如添加索引)的方式得以實現。即使對於一個比較大的db_cache_size,我們也可以減少緩沖區忙等待的時間。

為了能夠查看整個系統的等待事件,我們可以查閱v$system_event性能視圖。這一性能視圖提供了等待事件的名稱,等待事件與時間的總和,以及每一事件的平均等待時間。

可以通過v$waitstat視圖來查詢導致等待的緩沖區的類型。這一視圖列出了每一緩沖區類型的等待,COUNT是類所有的等待總和,TIME是這一類所有等待的時間總和,如下所示: select * from v$waitstat;
 類  COUNT  TIME
------------------ ---------- ----------
data block19611131870278
segment header 34535 159082
undo header233632 86239
undo block  1886  1706

當一個session訪問緩沖區的塊時,就有可能產生緩沖忙等待。這一緩沖區忙等待的產生可能由以下的原因造成的:

塊可能被其它的session讀到緩沖區,所以session必須等待塊的讀入結束。

session可能有與等待的session查詢不協調的緩沖塊。

由於緩沖區忙等待是由不同特定的塊之間的競爭而造成的,所以只能通過識別哪些塊發生沖突和沖突產生的原因,你才有可能做出判斷,相應的調整包括識別和消除塊競爭的原因。

v$session_wait性能視圖,提供了識別等待產生原因的方法。

v$session_wait視圖的列代表的緩沖區忙等待事件如下:

P1—與等待相關的數據文件的全部文件數量。

P2—P1中的數據文件的塊數量。

P3—描述等待產生原因的代碼。

這裡是一個這些值的Oracle數據詞典查詢: select
  p1 "File #".
  p2 "Block #",
  p3 "Reason Code"
from
  v$session_wait
where
  event = 'buffer busy waits';

  • 共2頁:
  • 上一頁
  • 1
  • 2
  • 下一頁
copyright © 萬盛學電腦網 all rights reserved