Oracle資料庫緩衝區忙等待的原因解析

來源:互聯網
上載者:User

眾多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';

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.