ORACLE學習幾個重要的後臺程式

shilei1發表於2012-07-25
今天有個同事問我oracle這幾個程式的關係和工作機制,簡單的回憶了一下,覺得這幾個程式對oracle的工作非常重要。
而且弄清這幾個程式,對學習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長度達到閥值:   
DBWR將Dirty List中的Dirty Buffer寫入磁碟(user Server Process在LRU List中查詢free buffer時將碰到的dirty blocks移入Dirty List)   
  
2. 當user Server Process在Buffer Cache的LRU List中搜尋了過長的時間而仍然沒有找到free buffer:   
DBWR直接從LRU List中將Dirty Buffer寫入磁碟   
  
3. 每過3秒鐘:   
DBWR把dirty buffers從LRU List移到Dirty List,一旦Dirty List長度達到閥值,DBWR便將資料寫入磁碟   
  
4. Checkpoint發生時:   
DBWR把所有的dirty buffers從LRU List移到Dirty List,並且開始寫資料   
  
5. 當Tablespace開始Hot backup時:   
DBWR把所有屬於該表空間的dirty buffers從LRU List移到Dirty List,並且開始寫資料   
  
6. 當Tablespace offline時:   
DBWR把所有屬於該表空間的dirty buffers從LRU List移到Dirty List,並且開始寫資料   
  
7. 執行Drop時:   
drop table或者index將促使DBWR先將屬於該segment的dirty blocks寫入磁碟   
  
  
checkpoint

checkpoint是一個資料庫事件,它將已修改的資料從快取記憶體重新整理到磁碟,並更新控制檔案和資料檔案。   
我們知道了checkpoint會重新整理髒資料,但什麼時候會發生checkpoint呢?以下幾種情況會觸發checkpoint。   
  
1.當發生日誌組切換的時候   
2.當符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target引數設定的時候   
3.當執行ALTER SYSTEM SWITCH LOGFILE的時候   
4.當執行ALTER SYSTEM CHECKPOINT的時候   
5.當執行alter tablespace XXX begin backup,end backup的時候   
6.當執行alter tablespace ,datafile offline的時候;  
何時觸發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長度達到閥值:
DBWR將Dirty List中的Dirty Buffer寫入磁碟(user Server Process在LRU List中查詢free buffer時將碰到的dirty blocks移入Dirty List)
2. 當user Server Process在Buffer Cache的LRU List中搜尋了過長的時間而仍然沒有找到free buffer:
DBWR直接從LRU List中將Dirty Buffer寫入磁碟
3. 每過3秒鐘:
DBWR把dirty buffers從LRU List移到Dirty List,一旦Dirty List長度達到閥值,DBWR便將資料寫入磁碟
4. Checkpoint發生時:
DBWR把所有的dirty buffers從LRU List移到Dirty List,並且開始寫資料
5. 當Tablespace開始Hot backup時:
DBWR把所有屬於該表空間的dirty buffers從LRU List移到Dirty List,並且開始寫資料
6. 當Tablespace offline時:
DBWR把所有屬於該表空間的dirty buffers從LRU List移到Dirty List,並且開始寫資料
7. 執行Drop時:
drop table或者index將促使DBWR先將屬於該segment的dirty blocks寫入磁碟

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



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

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

DBWR程式:
        該程式執行將緩衝區寫入資料檔案,是負責緩衝儲存區管理的一個ORACLE後臺程式。當緩衝區中的一緩衝區被修改,它被標誌為“弄髒”,DBWR的主要任務是將“弄髒”的緩衝區寫入磁碟,使緩衝區保持“乾淨”。由於緩衝儲存區的緩衝區填入資料庫或被使用者程式弄髒,未用的緩衝區的數目減少。當未用的緩衝區下降到很少,以致使用者程式要從磁碟讀入塊到記憶體儲存區時無法找到未用的緩衝區時,DBWR將管理緩衝儲存區,使使用者程式總可得到未用的緩衝區。 ORACLE採用LRU(LEAST 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所指定。如果弄髒表中沒有該引數指定塊數的緩衝區,DBWR從LUR表中查詢另外一個弄髒緩衝區。 如果DBWR在三秒內未活動,則出現超時。在這種情況下DBWR對LRU表查詢指定數目的緩衝區,將所找到任何弄髒緩衝區寫入磁碟。每當出現超時,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記錄在日誌中,以致在並行伺服器選項配置情況下,恢復操作可以同步。

轉載

http://space.itpub.net/751371

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

相關文章