ORACLE實例的后臺進程
更新時間:2009年09月29日 23:01:20 作者:
Oralce實例由內(nèi)存和后臺進程構(gòu)成。實例后臺進程在啟動實例時啟動,在終止實例時終止運行。
下面就來介紹一下這些在后臺辛勤工作的進程們。系統(tǒng)檢測器(System Monitor,SMON)、進程監(jiān)視器(Process Monitor,PMON)、數(shù)據(jù)庫寫入器(Database Writer,DBWn)、日志寫入器(Log Writer,LGWR)、檢查點進程(Checkpoint Process,CKPT)
1、SMON:安裝和打開數(shù)據(jù)庫。通過查找和驗證數(shù)據(jù)庫控制文件來安裝數(shù)據(jù)庫。此后,通過查找和驗證所有數(shù)據(jù)文件和聯(lián)機日志文件打開數(shù)據(jù)庫。一旦打開數(shù)據(jù)庫并使數(shù)據(jù)庫處于使用狀態(tài),SMON就負責執(zhí)行各種內(nèi)部管理任務。
2、PMON:用戶會話是連接到服務器進程的用戶進程。服務器進程在會話創(chuàng)建時啟動,在繪畫結(jié)束時銷毀。如果會話正常結(jié)束,則用戶執(zhí)行的任何工作都會有序完成,服務器進程將終止。如果非正常終止會話,PMON將銷毀服務器進程,將其PGA內(nèi)存返回給操作系統(tǒng),并回滾任何尚在進行的未提交完成的事務。
3、DBWn:會話不直接將數(shù)據(jù)寫入磁盤,而是寫入到數(shù)據(jù)庫高速緩存區(qū)。然后又數(shù)據(jù)庫寫入器負責將緩沖區(qū)寫入到磁盤。一般來說一個實例可能有多個寫入器。依次為DBW0,DBW1等。默認情況是8個CPU對應一個數(shù)據(jù)庫寫入器。
通常情況下,Oracle會盡可能的減少寫入緩沖區(qū)的數(shù)量。因為IO操作會降低性能。真實情況中,如果出現(xiàn)會話對某些緩沖區(qū)執(zhí)行寫作,那么通常還會有會話對其進行操作。這樣,就沒有必要將其寫入到磁盤了。
DBWn采用極懶算法執(zhí)行寫入:盡可能少,在盡可能少。有四種情況需要進行些操作:沒有可用緩沖區(qū)、臟緩沖區(qū)過多、遇到三秒超時,遇到檢查點。
沒有可用緩沖區(qū):服務器進程在將塊復制到高速緩沖區(qū)之前,需要查找可用緩沖區(qū)。可用緩沖區(qū)是既不臟也未被占用的緩沖區(qū)。如果查找可用緩沖區(qū)時間過長(Oracle內(nèi)部自行設定),則會將臟緩沖區(qū)寫入到磁盤,以清理緩沖區(qū)。
臟緩沖區(qū)數(shù)量過多:在什么情況下謂多,有Oracle的內(nèi)部閾值確定,如果超過了,就會將一些緩沖區(qū)寫到磁盤
三秒超時:DBWn每三秒會對一些緩沖區(qū)清理一次。即使系統(tǒng)處于閑置狀態(tài),也會清理緩沖區(qū)。
請求檢查點:遇到檢查點時,會寫入所有的緩沖區(qū)數(shù)據(jù)。此時系統(tǒng)性能下降。檢查點只有在不得已的情況下才會設置。關(guān)閉數(shù)據(jù)庫和關(guān)閉實例時會設置檢查點,也可以使用命令來設置。
在這里需要注意一點,在會話提交事務時,DBWn什么也不做,DBWn按照自己的方式執(zhí)行。此時需要執(zhí)行的操作是:寫入日志緩沖區(qū)的數(shù)據(jù)。
4、LGWR:日志寫入器將日志緩沖區(qū)的內(nèi)容寫入到磁盤上的聯(lián)機日志文件中。當會話發(fā)出COMMIT時,LGWR會實時寫入:在LGWR將緩沖區(qū)寫入磁盤時,會話將會被掛起。在Oracle體系結(jié)構(gòu)中,LGWR是最大的瓶頸之一。DML的速度不能超過LGWR將更改矢量寫入到磁盤的速度。在以下三種情況發(fā)生時,LGWR將轉(zhuǎn)儲日志緩沖區(qū):
提交寫入時:已提交事務的每個更改矢量都可以再磁盤上的重做日志中得到,并可以再此后應用于數(shù)據(jù)文件備份。
日志緩沖區(qū)的占用率達到1/3:在應用程序中,通常在非常短的時間內(nèi)就能填充滿日志緩沖區(qū)的1/3,這時強制LGWR將更改矢量準實時的寫入磁盤。此后,當會話發(fā)生COMMIT時,幾乎沒有什么要寫入的內(nèi)容:COMMIT可以立即完成。
DBWn需要將臟緩沖區(qū)從數(shù)據(jù)庫高速緩存區(qū)寫入到數(shù)據(jù)文件時:在DBWn執(zhí)行寫入操作之前,總會執(zhí)行LGWR的寫入操作。目的是:始終可以逆轉(zhuǎn)未提交的事務。DBWn可能會將未提交的事務寫入數(shù)據(jù)文件,如果能過獲取逆轉(zhuǎn)事務所需的數(shù)據(jù)和更改矢量,這樣做就不會產(chǎn)生問題。所以,在DBWn執(zhí)行寫入之前,需要執(zhí)行LGWR的寫入,以確保這些數(shù)據(jù)進入重做日志文件中。
5、CKPT:系統(tǒng)崩潰后,必須從重做日志提取與臟緩沖區(qū)對應的所有更改矢量,并將其應用于數(shù)據(jù)塊。這就是恢復過程。頻繁的檢查點確保:可以將臟緩沖區(qū)快速寫入磁盤,從而最大程度的減少崩潰發(fā)生后必須應用的重做量。在Oracle8i之后,采用增量檢查點機制,DBWn以固定速率寫出臟緩沖區(qū),因此DBWn和LGWR之間始終有一個可以預見的差距。使用增量檢查點時系統(tǒng)性能更加平穩(wěn),恢復時間可以預測。
當然,在10g之后,Oracle又新增了幾個進程,這里簡單介紹一下:
MMON:管理監(jiān)視器(Maniageability Monitor),數(shù)據(jù)塊的自我監(jiān)視和自我調(diào)整的支持進程。
MMNL:MMON的輔助進程。
MMAN:支持內(nèi)存分布的自動調(diào)整。
1、SMON:安裝和打開數(shù)據(jù)庫。通過查找和驗證數(shù)據(jù)庫控制文件來安裝數(shù)據(jù)庫。此后,通過查找和驗證所有數(shù)據(jù)文件和聯(lián)機日志文件打開數(shù)據(jù)庫。一旦打開數(shù)據(jù)庫并使數(shù)據(jù)庫處于使用狀態(tài),SMON就負責執(zhí)行各種內(nèi)部管理任務。
2、PMON:用戶會話是連接到服務器進程的用戶進程。服務器進程在會話創(chuàng)建時啟動,在繪畫結(jié)束時銷毀。如果會話正常結(jié)束,則用戶執(zhí)行的任何工作都會有序完成,服務器進程將終止。如果非正常終止會話,PMON將銷毀服務器進程,將其PGA內(nèi)存返回給操作系統(tǒng),并回滾任何尚在進行的未提交完成的事務。
3、DBWn:會話不直接將數(shù)據(jù)寫入磁盤,而是寫入到數(shù)據(jù)庫高速緩存區(qū)。然后又數(shù)據(jù)庫寫入器負責將緩沖區(qū)寫入到磁盤。一般來說一個實例可能有多個寫入器。依次為DBW0,DBW1等。默認情況是8個CPU對應一個數(shù)據(jù)庫寫入器。
通常情況下,Oracle會盡可能的減少寫入緩沖區(qū)的數(shù)量。因為IO操作會降低性能。真實情況中,如果出現(xiàn)會話對某些緩沖區(qū)執(zhí)行寫作,那么通常還會有會話對其進行操作。這樣,就沒有必要將其寫入到磁盤了。
DBWn采用極懶算法執(zhí)行寫入:盡可能少,在盡可能少。有四種情況需要進行些操作:沒有可用緩沖區(qū)、臟緩沖區(qū)過多、遇到三秒超時,遇到檢查點。
沒有可用緩沖區(qū):服務器進程在將塊復制到高速緩沖區(qū)之前,需要查找可用緩沖區(qū)。可用緩沖區(qū)是既不臟也未被占用的緩沖區(qū)。如果查找可用緩沖區(qū)時間過長(Oracle內(nèi)部自行設定),則會將臟緩沖區(qū)寫入到磁盤,以清理緩沖區(qū)。
臟緩沖區(qū)數(shù)量過多:在什么情況下謂多,有Oracle的內(nèi)部閾值確定,如果超過了,就會將一些緩沖區(qū)寫到磁盤
三秒超時:DBWn每三秒會對一些緩沖區(qū)清理一次。即使系統(tǒng)處于閑置狀態(tài),也會清理緩沖區(qū)。
請求檢查點:遇到檢查點時,會寫入所有的緩沖區(qū)數(shù)據(jù)。此時系統(tǒng)性能下降。檢查點只有在不得已的情況下才會設置。關(guān)閉數(shù)據(jù)庫和關(guān)閉實例時會設置檢查點,也可以使用命令來設置。
在這里需要注意一點,在會話提交事務時,DBWn什么也不做,DBWn按照自己的方式執(zhí)行。此時需要執(zhí)行的操作是:寫入日志緩沖區(qū)的數(shù)據(jù)。
4、LGWR:日志寫入器將日志緩沖區(qū)的內(nèi)容寫入到磁盤上的聯(lián)機日志文件中。當會話發(fā)出COMMIT時,LGWR會實時寫入:在LGWR將緩沖區(qū)寫入磁盤時,會話將會被掛起。在Oracle體系結(jié)構(gòu)中,LGWR是最大的瓶頸之一。DML的速度不能超過LGWR將更改矢量寫入到磁盤的速度。在以下三種情況發(fā)生時,LGWR將轉(zhuǎn)儲日志緩沖區(qū):
提交寫入時:已提交事務的每個更改矢量都可以再磁盤上的重做日志中得到,并可以再此后應用于數(shù)據(jù)文件備份。
日志緩沖區(qū)的占用率達到1/3:在應用程序中,通常在非常短的時間內(nèi)就能填充滿日志緩沖區(qū)的1/3,這時強制LGWR將更改矢量準實時的寫入磁盤。此后,當會話發(fā)生COMMIT時,幾乎沒有什么要寫入的內(nèi)容:COMMIT可以立即完成。
DBWn需要將臟緩沖區(qū)從數(shù)據(jù)庫高速緩存區(qū)寫入到數(shù)據(jù)文件時:在DBWn執(zhí)行寫入操作之前,總會執(zhí)行LGWR的寫入操作。目的是:始終可以逆轉(zhuǎn)未提交的事務。DBWn可能會將未提交的事務寫入數(shù)據(jù)文件,如果能過獲取逆轉(zhuǎn)事務所需的數(shù)據(jù)和更改矢量,這樣做就不會產(chǎn)生問題。所以,在DBWn執(zhí)行寫入之前,需要執(zhí)行LGWR的寫入,以確保這些數(shù)據(jù)進入重做日志文件中。
5、CKPT:系統(tǒng)崩潰后,必須從重做日志提取與臟緩沖區(qū)對應的所有更改矢量,并將其應用于數(shù)據(jù)塊。這就是恢復過程。頻繁的檢查點確保:可以將臟緩沖區(qū)快速寫入磁盤,從而最大程度的減少崩潰發(fā)生后必須應用的重做量。在Oracle8i之后,采用增量檢查點機制,DBWn以固定速率寫出臟緩沖區(qū),因此DBWn和LGWR之間始終有一個可以預見的差距。使用增量檢查點時系統(tǒng)性能更加平穩(wěn),恢復時間可以預測。
當然,在10g之后,Oracle又新增了幾個進程,這里簡單介紹一下:
MMON:管理監(jiān)視器(Maniageability Monitor),數(shù)據(jù)塊的自我監(jiān)視和自我調(diào)整的支持進程。
MMNL:MMON的輔助進程。
MMAN:支持內(nèi)存分布的自動調(diào)整。
相關(guān)文章
Oracle?查詢語句限制只選擇最前面幾行和最后面幾行的實現(xiàn)方式
在Oracle中,可以使用?ROWNUM?關(guān)鍵字來限制查詢結(jié)果的行數(shù),這篇文章主要介紹了Oracle?查詢語句限制只選擇最前面幾行和最后面幾行的實現(xiàn)方式,需要的朋友可以參考下2023-12-12使用PL/SQL Developer連接Oracle數(shù)據(jù)庫的方法圖解
之前因為項目的原因需要使用Oracle數(shù)據(jù)庫,由于時間有限沒辦法從基礎(chǔ)開始學習,而且oracle操作的命令界面又太不友好,于是就找到了PL/SQL Developer這個很好用的軟件來間接使用數(shù)據(jù)庫,下面簡單介紹一下如何用這個軟件連接Oracle數(shù)據(jù)庫2016-12-12Oracle中instr函數(shù)與substr函數(shù)及自制分割函數(shù)詳解
這篇文章主要介紹了Oracle中instr函數(shù)與substr函數(shù)以及自制分割函數(shù),大家都知道substr函數(shù)就是很簡單明了,就是個截取字符函數(shù),本文通過實例代碼對這接個函數(shù)詳細介紹,需要的朋友可以參考下2023-07-07Oracle數(shù)據(jù)泵EXPDP/IMPDP導出導入功能詳細深入解析
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)泵EXPDP/IMPDP導出導入功能的相關(guān)資料,數(shù)據(jù)泵導出/導入屬于邏輯備份,熱備份與冷備份都屬于物理備份,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-12-12Oracle使用pivot和unpivot函數(shù)實現(xiàn)行列轉(zhuǎn)換
項目開發(fā)過程中常常會涉及到oracle數(shù)據(jù)庫的一個數(shù)據(jù)操作,那就是行列的互轉(zhuǎn),本文為大家介紹了兩個可以實現(xiàn)這一操作的函數(shù)pivot和unpivot,感興趣的可以了解一下2023-06-06Linux環(huán)境下Oracle安裝參數(shù)設置方法詳解
這篇文章主要介紹了Linux環(huán)境下Oracle安裝參數(shù)設置方法,本文通過代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-06-06