解讀Oracle數(shù)據(jù)庫后臺進程的功能
DBWR進程:該進程執(zhí)行將緩沖區(qū)寫入數(shù)據(jù)文件,是負責緩沖存儲區(qū)管理的一個Oracle后臺進程。當緩沖區(qū)中的一緩沖區(qū)被修改,它被標志為“弄臟”,DBWR的主要任務(wù)是將“弄臟”的緩沖區(qū)寫入磁盤,使緩沖區(qū)保持“干凈”。由于緩沖存儲區(qū)的緩沖區(qū)填入數(shù)據(jù)庫或被用戶進程弄臟,未用的緩沖區(qū)的數(shù)目減少。當未用的緩沖區(qū)下降到很少,以致用戶進程要從磁盤讀入塊到內(nèi)存存儲區(qū)時無法找到未用的緩沖區(qū)時,DBWR將管理緩沖存儲區(qū),使用戶進程總可得到未用的緩沖區(qū)。
Oracle采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持內(nèi)存中的數(shù)據(jù)塊是最近使用的,使I/O最小。在下列情況預(yù)示DBWR 要將弄臟的緩沖區(qū)寫入磁盤:
當一個服務(wù)器進程將一緩沖區(qū)移入“弄臟”表,該弄臟表達到臨界長度時,該服務(wù)進程將通知DBWR進行寫。該臨界長度是為參數(shù)DB-BLOCK-WRITE-BATCH的值的一半。
當一個服務(wù)器進程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩沖區(qū)時,沒有查到未用的緩沖區(qū),它停止查找并通知DBWR進行寫。出現(xiàn)超時(每次3秒),DBWR 將通知本身。當出現(xiàn)檢查點時,LGWR將通知DBWR.在前兩種情況下,DBWR將弄臟表中的塊寫入磁盤,每次可寫的塊數(shù)由初始化參數(shù)DB-BLOCK- WRITE-BATCH所指定。如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū),DBWR從LUR表中查找另外一個弄臟緩沖區(qū)。
如果DBWR在三秒內(nèi)未活動,則出現(xiàn)超時。在這種情況下DBWR對LRU表查找指定數(shù)目的緩沖區(qū),將所找到任何弄臟緩沖區(qū)寫入磁盤。每當出現(xiàn)超時,DBWR查找一個新的緩沖區(qū)組。每次由DBWR查找的緩沖區(qū)的數(shù)目是為寢化參數(shù)DB-BLOCK- WRITE-BATCH的值的二倍。如果數(shù)據(jù)庫空運轉(zhuǎn),DBWR最終將全部緩沖區(qū)存儲區(qū)寫入磁盤。
在出現(xiàn)檢查點時,LGWR指定一修改緩沖區(qū)表必須寫入到磁盤。DBWR將指定的緩沖區(qū)寫入磁盤。
在有些平臺上,一個實例可有多個DBWR.在這樣的實例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數(shù)DB-WRITERS控制DBWR進程個數(shù)。
LGWR進程:該進程將日志緩沖區(qū)寫入磁盤上的一個日志文件,它是負責管理日志緩沖區(qū)的一個Oracle后臺進程。LGWR進程將自上次寫入磁盤以來的全部日志項輸出,LGWR輸出:
當用戶進程提交一事務(wù)時寫入一個提交記錄。
每三秒將日志緩沖區(qū)輸出。
當日志緩沖區(qū)的1/3已滿時將日志緩沖區(qū)輸出。
當DBWR將修改緩沖區(qū)寫入磁盤時則將日志緩沖區(qū)輸出。
LGWR進程同步地寫入到活動的鏡象在線日志文件組。如果組中一個文件被刪除或不可用,LGWR 可繼續(xù)地寫入該組的其它文件。
日志緩沖區(qū)是一個循環(huán)緩沖區(qū)。當LGWR將日志緩沖區(qū)的日志項寫入日志文件后,服務(wù)器進程可將新的日志項寫入到該日志緩沖區(qū)。LGWR 通常寫得很快,可確保日志緩沖區(qū)總有空間可寫入新的日志項。
注意:有時候當需要更多的日志緩沖區(qū)時,LWGR在一個事務(wù)提交前就將日志項寫出,而這些日志項僅當在以后事務(wù)提交后才永久化。
ORACLE使用快速提交機制,當用戶發(fā)出COMMIT語句時,一個COMMIT記錄立即放入日志緩沖區(qū),但相應(yīng)的數(shù)據(jù)緩沖區(qū)改變是被延遲,直到在更有效時才將它們寫入數(shù)據(jù)文件。當一事務(wù)提交時,被賦給一個系統(tǒng)修改號(SCN),它同事務(wù)日志項一起記錄在日志中。由于SCN記錄在日志中,以致在并行服務(wù)器選項配置情況下,恢復(fù)操作可以同步。
CKPT進程:該進程在檢查點出現(xiàn)時,對全部數(shù)據(jù)文件的標題進行修改,指示該檢查點。在通常的情況下,該任務(wù)由LGWR執(zhí)行。然而,如果檢查點明顯地降低系統(tǒng)性能時,可使CKPT進程運行,將原來由LGWR進程執(zhí)行的檢查點的工作分離出來,由 CKPT進程實現(xiàn)。對于許多應(yīng)用情況,CKPT進程是不必要的。只有當數(shù)據(jù)庫有許多數(shù)據(jù)文件,LGWR在檢查點時明顯地降低性能才使CKPT運行。 CKPT進程不將塊寫入磁盤,該工作是由DBWR完成的。
相關(guān)文章:
1. 使用MySqldump命令導(dǎo)出數(shù)據(jù)時的注意3. Mysql入門系列:MYSQL圖像數(shù)據(jù)的處理4. 使用Oracle數(shù)據(jù)庫過程中最常碰到的六個錯誤5. 導(dǎo)出錯誤編碼的mysql數(shù)據(jù)庫6. Mysql入門系列:對MYSQL查詢中有疑問的數(shù)據(jù)進行編碼7. SQL Server數(shù)據(jù)庫超級管理員賬號防護知識8. Oracle數(shù)據(jù)庫刪除表中重復(fù)記錄的常見方法9. DB2數(shù)據(jù)庫歸檔日志的管理方案簡介10. Oracle rac環(huán)境的數(shù)據(jù)庫導(dǎo)入操作步驟
