下面就來介紹一下這些在後台辛勤工作的進程們。系統檢測器(System Monitor,SMON)、進程監視器(Process Monitor,PMON)、資料庫寫入器(Database Writer,DBWn)、日誌寫入器(Log Writer,LGWR)、檢查點進程(Checkpoint Process,CKPT)
1、SMON:安裝和開啟資料庫。通過尋找和驗證資料庫控制檔案來安裝資料庫。此後,通過尋找和驗證所有資料檔案和聯機記錄檔開啟資料庫。一旦開啟資料庫並使資料庫處於使用狀態,SMON就負責執行各種內部管理工作。
2、PMON:使用者會話是串連到伺服器處理序的使用者進程。伺服器處理序在會話建立時啟動,在繪畫結束時銷毀。如果會話正常結束,則使用者執行的任何工作都會有序完成,伺服器處理序將終止。如果非正常終止會話,PMON將銷毀伺服器處理序,將其PGA記憶體返回給作業系統,並復原任何尚在進行的未提交完成的事務。
3、DBWn:會話不直接將資料寫入磁碟,而是寫入到資料庫快取區。然後又資料庫寫入器負責將緩衝區寫入到磁碟。一般來說一個執行個體可能有多個寫入器。依次為DBW0,DBW1等。預設情況是8個CPU對應一個資料庫寫入器。
通常情況下,Oracle會儘可能的減少寫入緩衝區的數量。因為IO操作會降低效能。真實情況中,如果出現會話對某些緩衝區執行寫作,那麼通常還會有會話對其進行操作。這樣,就沒有必要將其寫入到磁碟了。
DBWn採用極懶演算法執行寫入:儘可能少,在儘可能少。有四種情況需要進行些操作:沒有可用緩衝區、髒緩衝區過多、遇到三秒逾時,遇到檢查點。
沒有可用緩衝區:伺服器處理序在將塊複製到高速緩衝區之前,需要尋找可用緩衝區。可用緩衝區是既不髒也未被佔用的緩衝區。如果尋找可用緩衝區時間過長(Oracle內部自行設定),則會將髒緩衝區寫入到磁碟,以清理緩衝區。
髒緩衝區數量過多:在什麼情況下謂多,有Oracle的內部閾值確定,如果超過了,就會將一些緩衝區寫到磁碟
三秒逾時:DBWn每三秒會對一些緩衝區清理一次。即使系統處於閑置狀態,也會清理緩衝區。
請求檢查點:遇到檢查點時,會寫入所有的緩衝區資料。此時系統效能下降。檢查點只有在不得已的情況下才會設定。關閉資料庫和關閉執行個體時會設定檢查點,也可以使用命令來設定。
在這裡需要注意一點,在會話提交事務時,DBWn什麼也不做,DBWn按照自己的方式執行。此時需要執行的操作是:寫入日誌緩衝區的資料。
4、LGWR:日誌寫入器將日誌緩衝區的內容寫入到磁碟上的聯機記錄檔中。當會話發出COMMIT時,LGWR會即時寫入:在LGWR將緩衝區寫入磁碟時,會話將會被掛起。在Oracle體繫結構中,LGWR是最大的瓶頸之一。DML的速度不能超過LGWR將更改向量寫入到磁碟的速度。在以下三種情況發生時,LGWR將轉儲日誌緩衝區:
提交寫入時:已提交事務的每個更改向量都可以再磁碟上的重做日誌中得到,並可以再此後應用於資料檔案備份。
日誌緩衝區的佔用率達到1/3:在應用程式中,通常在非常短的時間內就能填充滿日誌緩衝區的1/3,這時強制LGWR將更改向量准即時的寫入磁碟。此後,當會話發生COMMIT時,幾乎沒有什麼要寫入的內容:COMMIT可以立即完成。
DBWn需要將髒緩衝區從資料庫快取區寫入到資料檔案時:在DBWn執行寫入操作之前,總會執行LGWR的寫入操作。目的是:始終可以逆轉未提交的事務。DBWn可能會將未提交的事務寫入資料檔案,如果能過擷取逆轉事務所需的資料和更改向量,這樣做就不會產生問題。所以,在DBWn執行寫入之前,需要執行LGWR的寫入,以確保這些資料進入重做記錄檔中。
5、CKPT:系統崩潰後,必須從重做日誌提取與髒緩衝區對應的所有更改向量,並將其應用於資料區塊。這就是恢複過程。頻繁的檢查點確保:可以將髒緩衝區快速寫入磁碟,從而最大程度的減少崩潰發生後必須應用的重做量。在Oracle8i之後,採用增量檢查點機制,DBWn以固定速率寫出髒緩衝區,因此DBWn和LGWR之間始終有一個可以預見的差距。使用增量檢查點時系統效能更加平穩,恢復可以預測。
當然,在10g之後,Oracle又新增了幾個進程,這裡簡單介紹一下:
MMON:管理監視器(Maniageability Monitor),資料區塊的自我監視和自我調整的支援進程。
MMNL:MMON的輔助進程。
MMAN:支援記憶體分布的自動調整。