【Oracle】-【體系結構-DBWR】-DBWR程式相關理解

bisal發表於2013-07-26

對DBWR的一些理解


首先從名稱上,DBWR全稱是Database Writer Process,屬於Oracle後臺程式的一種,有的地方也叫DBWn,我想這裡是出於DBWR程式個數的原因,DBWR程式在一個Oracle Server中可以最多有20個,編號是DBW1-DBW9和DBWa-DBWj,下面根據不同文件、官方手冊以及高手帖的理解,總結關於DBWR的一些關鍵點:

1、DBWR是將資料庫buffer cache中的dirty資料塊寫到磁碟中,這裡dirty表示的是buffer cache中被修改的buffer快取,DBWR是根據LRU演算法實現從快取寫到磁碟的,與dirty相對的還有cold(或clean)塊的概念,即未修改的快取。根據LRU演算法,DBWR會將最近最少被使用的buffer寫入磁碟,以讓其它的資料內容可以寫入該快取,也就是free buffer增加,否則一味地佔用buffer cache,新的資料就不能利用buffer cache了。

2、新增的DBWn不能在單處理器中使用,對於數量,每8個CPU可以至少利用一個DBWR程式,如果是處理器組,那麼有多少個處理器組,就應該有多少個DBWR程式。DBWR的個數可以由初始化引數DB_WRITER_PROCESSES決定。總結來講,DBWR的個數如果沒有在啟動時由使用者指定,那麼Oracle會根據CPU和處理器組的個數來設定DB_WRITER_PROCESSES引數。

3、DBWR程式會將dirty快取寫入磁碟,條件是:

(1)、服務程式在掃描buffer個數閾值(由隱藏引數:_db_block_max_scan_pct,代表已經掃描的buffer header的個數佔整個LRU連結串列上buffer header總數的百分比)後還沒找到一塊clean未用的快取時,會觸發DBWR。當執行其它處理時,DBWR會非同步地將dirty快取寫入磁碟。

(2)、當出現checkpoint時,DBWR會將dirty的快取寫到磁碟。

(3)、資料檔案或表空間離線。

(4)、表空間在備份。

(5)、表空間只讀。

(6)、超時。

(7)、表被刪除或截斷。

4、DBWR是批量(多塊)寫入,以提高效能。塊的數量在不同的作業系統有不同的設定。

5、關於DB_WRITER_PROCESSES,官方文件註明它的預設值是1或CPU數量/8,以及任何大於它的值,範圍是1到20。

最重要的一點就是不是每次交易執行commit時,都會立即呼叫DBWR,換句話說,commit時DBWR不會做任何事情。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-767166/,如需轉載,請註明出處,否則將追究法律責任。

相關文章