觸發DBWR進程寫髒數據塊到數據文件的幾個條件

DBWR作爲一個後臺進程,只有在某些條件滿足了纔會觸發。這些條件包括:

1) 當進程在輔助LRU鏈表和主LRU鏈表上掃描以查找可以覆蓋的buffer header時,如果已經掃描的buffer header的數量到達一定的限度(由隱藏參數:_db_block_max_scan_pct決定)時,觸發DBWR進程。 _db_block_max_scan_pct表示已經掃描的buffer header的個數佔整個LRU鏈表上buffer header總數的百分比。這時,搜索可用buffer header的進程掛起,在v$session_wait中表現爲等待“free buffer wait”事件,同時增加v$sysstat中的“dirty buffers inspected”的值。

2) 當DBWR在主LRUW鏈表上查找已經更新完而正在等待被寫入數據文件的buffer header時,如果找到的buffer header的數量超過一定限度(由隱藏參數:_db_writer_scan_depth_pct決定)時,DBWR就不再繼續往下掃描了,而轉到輔助 LRUW鏈表上將其上的髒數據塊寫入數據文件。_db_writer_scan_depth_pct表示已經掃描的髒數據塊的個數佔整個主LRUW鏈表上 buffer header總數的百分比。

3) 如果主LRUW鏈表和輔助LRUW鏈表上的髒數據塊的總數超過一定限度,也將觸發DBWR進程。該限度由隱藏參數:_db_large_dirty_queue決定。
4) 發生增量檢查點(incremental checkpoint)或完全檢查點(complete checkpoint)時觸發DBWR。
5) 每隔三秒鐘啓動一次DBWR。
6) 將表空間設置爲離線(offline)狀態時觸發DBWR。
7) 發出命令:alter tablespace … begin backup,從而將表空間設置爲熱備份狀態時觸發DBWR。
8) 將表空間設置爲只讀狀態時,觸發DBWR。
9) 刪除對象時(比如刪除某個表)會觸發DBWR。

 

原帖:http://blog.csdn.net/cn_chenfeng/archive/2007/09/04/1771650.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章