Oracle體系結構之-Oracle後臺程式

pingyuan發表於2008-08-07
Oracle體系結構之-Oracle後臺程式[@more@]前面我們說過,Oracle的例項由記憶體結構和一組後臺的程式組成。Oracle的後臺程式比較重要的包括以下幾個:

·SMON
·PMON
·DBWR
·LGWR
·ARCH
·CKPT

下面我們將逐一介紹各個程式的作用。

一、SMON
SMON(System Monitor)-系統監控程式,在例項啟動時執行例項恢復,並負責清理不再使用的臨時段。
SMON程式要完成所有“系統級”任務。PMON感興趣的是單個的程式,而SMON與之不同,它以系統級為出發點,這是一種資料庫“垃圾收集器”。SMON所做的工作包括:
·清理臨時空間
·合併空閒空間
·針對原來不可用的檔案恢復活動的事務
·執行RAC中失敗節點的例項恢復
·清理OBJ$
·收縮回滾段
·“離線”回滾段

二、PMON
PMON (程式監控程式)後臺程式清除失敗使用者的程式,釋放使用者當時正在使用的資源。PMON負責釋放鎖並使其可以被其他使用者使用。同SMON一樣,PMON週期性地喚醒檢測它是否需要被使用。
PMON負責在出現異常中止的連線之後完成清理-釋放資源,回滾未提交的事務工作
PMON還負責監視其他的Oracle後臺程式,並在必要時重啟這些後臺程式。
PMON還會為例項做另外一件事,這就是向Oracle TNS監聽器註冊這個例項。

三、DBWR
DBWR (資料庫寫入程式)後臺程式負責管理資料塊快取區及字典快取區的內容。它以批方式把修改塊從SGA寫到資料檔案中。

儘管每一個資料庫例項只有一個SMON和一個PMON程式在執行,但是根據平臺和作業系統的不同,使用者可以同時擁有多個DBWR程式。

DBWn會寫出緩衝區快取中的髒塊,通常是為了在快取中騰出更多的空間(釋放快取區來讀入其他資料),或者是為了推進檢查點(將線上重做日誌檔案中的位置前移,如果出現失敗,Oracle會從這個位置開始獨取來恢復例項。)

可以看到,DBWn的效能可能很重要。如果它寫出塊的速度不夠快,不能很快地釋放緩衝區,就會看到Free Buffer Waits和Write Complete Waits的等待數和等待時間開始增長。可以配置多個DBWn;實際上可以配置多達20個的DBWn。
最好的情況下,DBWn使用非同步I/O將塊寫至磁碟。採用非同步I/O,DBWn會收集一批要寫的塊,並把它們交給作業系統。DBWn並不等待作業系統真正將塊寫出;而是立即返回,並收集下一批要寫的塊。當作業系統完成寫操作時,它會非同步地通知DBWn寫操作已經完成。這樣,與所有的操作都序列進行相比,DWBn可以更快地工作。

根據定義,塊寫入器程式會把塊寫出到所有磁碟,即分散到各個磁碟上;也就是說,DBWn會做大量的分散寫執行一個更新時,你會修改多處儲存的索引塊,還可能修改隨機地分佈到磁碟上的資料塊。另一方面,LGWR則是向重做日誌完成大量的順序寫。這是一個很重要的區別。
分散寫比順序寫慢多了。透過在SGA中快取髒塊,並由LGWR程式完成大規模順序寫,這樣可以提升效能。DBWn在後臺完成它的任務(很慢),而LGWR在使用者等待時完成自己的任務(這個任務比較快),這樣我們就能夠得到更好的整體效能。

四、LGWR
LGWR(日誌寫入程式)後臺程式負責把聯機重做日誌緩衝區的內容寫入聯機重做日誌檔案。
LGWR分批將日誌條目寫入聯機重做日誌檔案。重做日誌緩衝區條目總是包含著資料庫的最新狀態
,這是因為DBWR程式可以一直等待到把資料塊緩衝區中的修改資料塊寫入到資料檔案中。

LGWR是資料庫正常操作時唯一向聯機重做日誌檔案寫入內容並從重做日誌緩衝區直接讀取內容的程式。與DBWR對資料檔案執行的完全隨機訪問相反,聯機重做日誌檔案以序列形式寫入。如果聯機重做日誌檔案是映象檔案, LGWR同時向映象日誌檔案中寫內容。

對於Oracle 8,可以建立多個LGWR I/O從程式以改善向聯機重做日誌檔案的寫入效能,其個數由資料庫的init.ora檔案的LGWR _IO_SL AVES引數決定。在Oracle 8 i中,這個引數已不能用, LGWR I/O從程式由DBWR _ IO _SLAVES設定值派生而來。
如果滿足以下某個條件,LGWR程式就會把重做日誌緩衝區的內容重新整理輸出到磁碟上:
·每3秒鐘會重新整理輸出一次
·任何事務發出一個提交時
·重做日誌緩衝區1/3滿,或者已經包含1MB的緩衝資料

由於這些原因,分配超大的重做日誌緩衝區並不實際,Oracle根本不可能完全使用這個緩衝區。

五、ARCH
LGWR後臺程式以迴圈方式向聯機重做日誌檔案寫入;當填滿第一個日誌檔案後,就開始向第二個日誌檔案寫入;第二個日誌檔案填滿後,再向第三個日誌檔案寫入。一旦最後一個重做日誌檔案填滿, LGWR就開始重寫第一個重做日誌檔案的內容。

當Oracle以ARCHIVELOG (歸檔日誌)模式執行時,資料庫在開始重寫重做日誌檔案之前先對其進行備份。這些歸檔的重做日誌檔案通常寫入一個磁碟裝置中。也可以直接寫入磁帶裝置中,但是這往往要增加操作員的勞動強度。

這種歸檔功能由ARCH (歸檔程式)後臺程式完成,利用該效能的資料庫在處理大資料事務時將遇到重做日誌磁碟衝突問題,這是因為當LGWR準備寫入一個重做日誌檔案時, ARCH正準備讀取另一個。如果歸檔日誌目標磁碟寫滿,資料庫還將遇到資料庫鎖定問題。此時,ARCH凍結,禁止LGW R寫入;從而禁止在資料庫中出現進一步的事務處理;這種情況一起延續到歸檔重做日誌檔案的空間清空為止。

線上重做日誌(LGWR)用於在出現電源故障(例項中止)時“修正”資料檔案,而歸檔重做日誌則不同,它是在出現硬碟故障時用於“修正”資料檔案。
ARCH通常將線上重做日誌檔案複製到至少兩個位置(冗餘正是不丟失資料的關鍵所在!)。這些位置可能是本地機器上的磁碟,或者更確切地講,至少有一個在另一臺機器上,以應付災難性失敗。

六、CKPTCKPT (檢查點程式)用來減少執行例項恢復所需的時間。檢查點使DBWR把上一個檢查點以後的全部已修改資料塊寫入資料檔案,並更新資料檔案頭部和控制檔案以記錄該檢查點。

當一個聯機重做日誌檔案被填滿時,檢查點程式會自動出現。可以用資料庫例項的init.ora檔案中的LOG_CHECKPOINT_INTERVAL引數來設定一個頻繁出現的檢查點。

注意:
檢查點程式並不像它的名字所暗示的那樣,真的建立檢查點--建立檢查點是主要是DBWn的任務。CKPT只是更新資料檔案的檔案首部,以輔助真正建立檢查點的程式(DBWn)。
注:本文所有內容均摘自CSDN網友方友松的技術Blog(作者的Blog地址為:http://blog.csdn.net/truexf/)
以及Tom kyte的《Oracle9i&10g程式設計藝術》人民郵電出版社

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

相關文章