buffer cache實驗8-free buffer waits-完成

還不算暈發表於2014-02-27
伺服器程式在掃描LRU主列時,將髒塊移動到LRUW列。當掃描到一個閥值(10G/11G是40%- _db_block_max_scan_pct引數決定)時會停止掃描同時通知DBWR寫髒塊-寫髒塊完後的塊重新掛載到輔助LRU列,就得到了空閒buffer。
DBWR程式寫髒塊完成前,伺服器程式等待空閒buffer時出現free buffer waits等待事件

關於物理讀時找空閒BUFFER,LRUW與寫髒塊詳細過程,詳見:
_db_block_max_scan_pct 引數的預設值--11.2.0.4
P_NAME                                   P_DESCRIPTION                                      P_VALUE                        ISDEFAULT ISMODIFIED ISADJ
---------------------------------------- -------------------------------------------------- ------------------------------ --------- ---------- -----
_db_block_max_scan_pct                   Percentage of buffers to inspect when looking for ree  40                             TRUE      FALSE  FALSE

引起爭用的場景及解決思路:
低效SQL-需要更多無關的資料塊,需要更多buffer,容易出現free buffer waits等待事件
buffer cache小不夠用--就是記憶體小buffer cache給的空間小,是實實在在的不夠用,考慮增大buffer cache。
DBWR寫的效能差--可能是資料庫的主機CPU資源緊張,DBWR程式工作慢,或者I/O慢,影響寫入速度,或者是CPU和I/O都沒問題,可以考慮增大DBWR程式數量。
因為DBWR程式寫髒塊到資料檔案時,會以獨佔模式佔用髒緩衝區,此時有其它程式要讀取或修改髒緩衝區,需要等待DBWR寫資料完成,此時會出現write complete waits等待。
判斷DBWR/儲存效能導致此類問題的步驟:
磁碟繁忙程度
磁碟響應時間--大I/0不超過20MS,小I/O不超過5MS
IOPS是否正常--每盤150左右
儲存CACHE是否正常--這個偶爾會出現
和儲存相關的硬體是否正常執行
-------如磁碟正常,要考慮增加DBWR程式數量--一般不能超過CPU數量。

free buffer waits等待常由應用--低效SQL引起
write complete waits等待常由儲存效能引起。   --此段來自周亮《ORACLE DBA實戰攻略》









相關文章