1. 程式人生 > >Oracle 幾個程序(LGWR,DBWR,CHPK)

Oracle 幾個程序(LGWR,DBWR,CHPK)

Log Writer (LGWR)   

LGWR performs sequential writes from the Redo Log Buffer to the online redo log file under the followingsituations:   
     1.When a transaction commits   
     2.When the Redo Log Buffer is one-third full  
     3.When there is more than 1 MB of changes recorded in the Redo Log Buffer   
     4.Before DBWn writes modified blocks in the Database Buffer Cache to the data files   
     5.Every three seconds   
    
.Because the redo is needed for recovery, LGWR confirms the commit operation only after the redo is written todisk.   
LGWR can also call on DBWn to write to the data files. 

Database Writer (DBWn)   

The server process records changes to undo and data blocks in the Database Buffer Cache. DBWn writes thedirty buffers from the Database Buffer Cache to the data files. It ensures that a sufficient number of free buffers(buffers that can be overwritten when server processes need to read in blocks from the data files) are availablein the Database Buffer Cache. Database performance is improved because server processes make changes onlyin the Database Buffer Cache.   
DBWn defers writing to the data files until one of the following events occurs:   
     Incremental or normal checkpoint  
     The number of dirty buffers reaches a threshold value   
     A process scans a specified number of blocks when scanning for free buffers and cannot find any  
     Timeout occurs   
     A ping request in Real Application Clusters (RAC) environment   
     Placing a normal or temporary tablespace offline   
     Placing a tablespace in read-only mode   
     Dropping or truncating a table  
     ALTER TABLESPACEtablespace nameBEGIN BACKUP   

1. Buffer Cache中的Dirty List長度達到閥值:   
DBWRDirty List中的Dirty Buffer寫入磁碟(user Server ProcessLRU List中查詢free buffer時將碰到的dirty blocks移入Dirty List   
  
2. user Server ProcessBuffer CacheLRU List中搜索了過長的時間而仍然沒有找到free buffer   
DBWR直接從LRU List中將Dirty Buffer寫入磁碟

   
  
3. 每過3秒鐘:   
DBWRdirty buffersLRU List移到Dirty List,一旦Dirty List長度達到閥值,DBWR便將資料寫入磁碟   
  
4. Checkpoint發生時:   
DBWR把所有的dirty buffersLRU List移到Dirty List,並且開始寫資料   
  
5. Tablespace開始Hot backup時:   
DBWR把所有屬於該表空間的dirty buffersLRU List移到Dirty List,並且開始寫資料   
  
6. Tablespace offline時:   
DBWR把所有屬於該表空間的dirty buffersLRU List移到Dirty List,並且開始寫資料   
  
7. 執行Drop時:   
drop table或者index將促使DBWR先將屬於該segmentdirty blocks寫入磁碟   
  

checkpoint 

checkpoint是一個數據庫事件,它將已修改的資料從快取記憶體重新整理到磁碟,並更新控制檔案和資料檔案。   
我們知道了checkpoint會重新整理髒資料,但什麼時候會發生checkpoint呢?以下幾種情況會觸發checkpoint   
  
1.當發生日誌組切換的時候   
2.當符合LOG_CHECKPOINT_TIMEOUTLOG_CHECKPOINT_INTERVALfast_start_io_target,fast_start_mttr_target引數設定的時候   
3.當執行ALTER SYSTEM SWITCH LOGFILE的時候   
4.當執行ALTER SYSTEM CHECKPOINT的時候   
5.當執行alter tablespace XXX begin backupend backup的時候   
6.當執行alter tablespace ,datafile offline的時候;  

 


PMON程序:
       該程序在使用者程序出現故障時執行程序恢復,負責清理記憶體儲區和釋放該程序所使用的資源。例:它要重置活動事務表的狀態,釋放封鎖,將該故障的程序的ID從活動程序表中移去。PMON還週期地檢查排程程序(DISPATCHER)和伺服器程序的狀態,如果已死,則重新啟動(不包括有意刪除的程序)。 
PMON有規律地被呼醒,檢查是否需要,或者其它程序發現需要時可以被呼叫。 

SMON程序:
        該程序例項啟動時執行例項恢復,還負責清理不再使用的臨時段。在具有並行伺服器選項的環境下,SMON對有故障CPU或例項進行例項恢復。SMON程序有規律地被呼醒,檢查是否需要,或者其它程序發現需要時可以被呼叫。 

DBWR程序:
        該程序執行將緩衝區寫入資料檔案,是負責緩衝儲存區管理的一個ORACLE後臺程序。當緩衝區中的一緩衝區被修改,它被標誌為弄髒DBWR的主要任務是將弄髒的緩衝區寫入磁碟,使緩衝區保持乾淨。由於緩衝儲存區的緩衝區填入資料庫或被使用者程序弄髒,未用的緩衝區的數目減少。當未用的緩衝區下降到很少,以致使用者程序要從磁碟讀入塊到記憶體儲存區時無法找到未用的緩衝區時,DBWR將管理緩衝儲存區,使使用者程序總可得到未用的緩衝區。 ORACLE採用LRULEAST RECENTLY USED)演算法(最近最少使用演算法)保持記憶體中的資料塊是最近使用的,使I/O最小。在下列情況預示DBWR 要將弄髒的緩衝區寫入磁碟: 
1、當一個伺服器程序將一緩衝區移入弄髒表,該弄髒表達到臨界長度時,該服務程序將通知DBWR進行寫。該臨界長度是為引數DB-BLOCK-WRITE-BATCH的值的一半。 
2、 當一個伺服器程序在LRU表中查詢DB-BLOCK-MAX-SCAN-CNT緩衝區時,沒有查到未用的緩衝區,它停止查詢並通知DBWR進行寫。 
3、出現超時(每次3秒),DBWR 將通知本身。 
4、 當出現檢查點時,LGWR將通知DBWR 在前兩種情況下,DBWR將弄髒表中的塊寫入磁碟,每次可寫的塊數由初始化引數DB-BLOCK-WRITE-BATCH所指定。如果弄髒表中沒有該引數指定塊數的緩衝區,DBWRLUR表中查詢另外一個弄髒緩衝區。 如果DBWR在三秒內未活動,則出現超時。在這種情況下DBWRLRU表查詢指定數目的緩衝區,將所找到任何弄髒緩衝區寫入磁碟。每當出現超時,DBWR查詢一個新的緩衝區組。每次由DBWR查詢的緩衝區的數目是為寢化引數DB-BLOCK-WRITE-BATCH的值的二倍。如果資料庫空運轉,DBWR最終將全部緩衝區儲存區寫入磁碟。 在出現檢查點時,LGWR指定一修改緩衝區表必須寫入到磁碟。DBWR將指定的緩衝區寫入磁碟。 在有些平臺上,一個例項可有多個DBWR。在這樣的例項中,一些塊可寫入一磁碟,另一些塊可寫入其它磁碟。引數DB-WRITERS控制DBWR程序個數。 

LGWR程序:
           該程序將日誌緩衝區寫入磁碟上的一個日誌檔案,它是負責管理日誌緩衝區的一個ORACLE後臺程序。LGWR程序將自上次寫入磁碟以來的全部日誌項輸出,LGWR輸出: 
1、 當用戶程序提交一事務時寫入一個提交記錄。 
2、每三秒將日誌緩衝區輸出。 
3、 當日志緩衝區的1/3已滿時將日誌緩衝區輸出。 
4、當DBWR將修改緩衝區寫入磁碟時則將日誌緩衝區輸出。 
LGWR程序同步地寫入到活動的鏡象線上日誌檔案組。如果組中一個檔案被刪除或不可用,LGWR 可繼續地寫入該組的其它檔案。 日誌緩衝區是一個迴圈緩衝區。當LGWR將日誌緩衝區的日誌項寫入日誌檔案後,
伺服器程序可將新的日誌項寫入到該日誌緩衝區。LGWR 通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項。 
注意:有時候當需要更多的日誌緩衝區時,LWGR在一個事務提交前就將日誌項寫出,而這些日誌項僅當在以後事務提交後才永久化。 ORACLE使用快速提交機制,當用戶發出COMMIT語句時,一個COMMIT記錄立即放入日誌緩衝區,但相應的資料緩衝區改變是被延遲,直到在更有效時才將它們寫入資料檔案。當一事務提交時,被賦給一個系統修改號(SCN),它同事務日誌項一起記錄在日誌中。由於SCN記錄在日誌中,以致在並行伺服器選項配置情況下,恢復操作可以同步。