本篇文章為大家展示了PMON、SMON、DBWR與LGWR的作用有哪些,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
目前創(chuàng)新互聯(lián)公司已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計、召陵網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
PMON進(jìn)程:該進(jìn)程在用戶進(jìn)程出現(xiàn)故障時執(zhí)行進(jìn)程恢復(fù),負(fù)責(zé)清理內(nèi)存儲區(qū)和釋放該進(jìn)程所使用的資源。例:它要重置活動事務(wù)表的狀態(tài),釋放封鎖,將該故障的進(jìn)程的ID從活動進(jìn)程表中移去。PMON還周期地檢查調(diào)度進(jìn)程(DISPATCHER)和服務(wù)器進(jìn)程的狀態(tài),如果已死,則重新啟動(不包括有意刪除的進(jìn)程)。
PMON有規(guī)律地被呼醒,檢查是否需要,或者其它進(jìn)程發(fā)現(xiàn)需要時可以被調(diào)用。
PMON進(jìn)程還負(fù)責(zé)在反常中斷的連接之后的清理工作。例如,如果因某些原因?qū)S梅?wù) “故障”或被kill掉,PMON就是負(fù)責(zé)處理(恢復(fù)或回滾工作)和釋放你的資源。PMON將發(fā)出未提交工作的回滾,釋放鎖,和釋放分配給故障進(jìn)程的SGA資源。
除了在異常中斷之后的清理外, PMON監(jiān)控其他oracle后臺進(jìn)程,如果有必要(和有可能)重新啟動他們。如果共享服務(wù)或一個分配器故障(崩潰),PMON將插手并且重啟另一個(在清理故障進(jìn)程之后)。PMON將觀察所有Oracle進(jìn)程,只要合適或重啟他們或中止進(jìn)程。例如,在數(shù)據(jù)庫日志寫進(jìn)程事件中,LGWR故障,實例故障。這是一個嚴(yán)重的錯誤,最安全的處理方法就是去立即終止實例,讓正常的恢復(fù)處理數(shù)據(jù)。(注意這是很少發(fā)生的事情,應(yīng)該立即報告oracle支持)。
PMON為實例做的另一件事是去使用 Oracle TNS監(jiān)聽器登記。當(dāng)一個實例開啟的時候,PMON進(jìn)程投出眾所周知的端口地址,除非指向其他,來看是否監(jiān)聽器正在開和運行著。眾所周知/默認(rèn)端口是使用1521。現(xiàn)在,如果監(jiān)聽器在一些不同端口開啟會發(fā)生什么?這種情況,機(jī)制是相同的,除了監(jiān)聽器地址需要被LOCAL_LISTENER參數(shù)明確指定。如果監(jiān)聽器運行在庫實例開啟的時候,PMON和監(jiān)聽器通訊,傳到它相關(guān)參數(shù),譬如服務(wù)器名和實例的負(fù)載度量。如果監(jiān)聽器沒被開啟,PMON將周期性的試著和它聯(lián)系來登記自己。
SMON進(jìn)程:該進(jìn)程實例啟動時執(zhí)行實例恢復(fù),還負(fù)責(zé)清理不再使用的臨時段。在具有并行服務(wù)器選項的環(huán)境下, SMON對有故障CPU或?qū)嵗M(jìn)行實例恢復(fù)。SMON進(jìn)程有規(guī)律地被呼醒,檢查是否需要,或者其它進(jìn)程發(fā)現(xiàn)需要時可以被調(diào)用。
SMON還負(fù)責(zé)做所有系統(tǒng)級的工作。相對于 PMON對單個進(jìn)程感興趣,SMON是一個系統(tǒng)級別的觀點,是一種用于庫的“垃圾收集者”。它做的工作包括如下7件:
1 清理臨時表空間:伴隨這 “真正”的臨時表空間的出現(xiàn),清理臨時表空間的雜事已經(jīng)減輕了,但它還沒完全消失。例如,當(dāng)建立一個索引,在創(chuàng)建期間分配給索引的擴(kuò)展區(qū)被標(biāo)志為TEMPORARY。如果Create Index會話因某些原因異常中斷,SMON負(fù)責(zé)清理他們。其他操作創(chuàng)建的臨時擴(kuò)展區(qū),SMON同樣會負(fù)責(zé)。
2 接合空閑空間:如果你正使用數(shù)據(jù)字典管理表空間, SMON負(fù)責(zé)把那些在表空間中空閑的并且互相是鄰近的extent接合成一個較大的空閑擴(kuò)展區(qū)。這發(fā)生僅在帶有默認(rèn)的pctincrease設(shè)置為非零的存儲子句的字典管理表空間。
3 把對于不可用文件的事務(wù)恢復(fù)成活動狀態(tài):它的角色類似在庫啟動期間。這時,因為文件不能用于恢復(fù), SMON恢復(fù)在實例/崩潰恢復(fù)期間被跳過的故障事務(wù)。例如,文件可能已經(jīng)在不可用或沒裝載的磁盤上。當(dāng)文件變可用了,SMON將恢復(fù)它。
4 執(zhí)行一個 RAC中故障節(jié)點的實例恢復(fù):在一個oracle RAC配置中,當(dāng)群集中的一個庫實例失?。ɡ?,實例正執(zhí)行的機(jī)器故障了),一些群集中的其他節(jié)點將開啟故障的實例的重做日志文件,為故障實例執(zhí)行所有數(shù)據(jù)的恢復(fù)。
5 清理 OBJ$:OBJ$是一個包含庫中幾乎每一個對象(表,索引,觸發(fā)器,視圖等等)的記錄的行級數(shù)據(jù)字典表。許多次,這兒存在的記錄代表已刪對象,或代表不在這兒的對象,在oracle的信賴機(jī)制中被使用。SMON是刪除這些不在被需要的行的進(jìn)程。
6 收縮回滾段: SMON將執(zhí)行回滾段的自動收縮到它的optimal尺寸,如果它被設(shè)置。
7 “脫機(jī) ”回滾段:對于DBA來,讓一個有active事務(wù)的回滾段,脫機(jī)或不可用,這事是可能的。Active事務(wù)正使用這脫機(jī)回滾段是可能的。在這情況下,回滾不是真正的脫機(jī);它被標(biāo)志為“懸掛offline”。在后臺進(jìn)程中,SMON將周期性盡力讓它真正脫機(jī),直到成功。它做許多其他事情,譬如存在DBA_TAB_MONITORING視圖中的監(jiān)控統(tǒng)計數(shù)據(jù)的洗刷,在SMON_SCN_TIME表中發(fā)現(xiàn)的時間戳定位信息的SCN的洗刷,等等。SMON在期間能消耗很多CPU,這應(yīng)該被認(rèn)為是正常的。SMON周期性的蘇醒(或被其他后臺進(jìn)程叫醒)來執(zhí)行這些管家的家庭雜事。
DBWR進(jìn)程:該進(jìn)程執(zhí)行將緩沖區(qū)寫入數(shù)據(jù)文件,是負(fù)責(zé)緩沖存儲區(qū)管理的一個 ORACLE后臺進(jìn)程。當(dāng)緩沖區(qū)中的一緩沖區(qū)被修改,它被標(biāo)志為“弄臟”,DBWR的主要任務(wù)是將“弄臟”的緩沖區(qū)寫入磁盤,使緩沖區(qū)保持“干凈”。由于緩沖存儲區(qū)的緩沖區(qū)填入數(shù)據(jù)庫或被用戶進(jìn)程弄臟,未用的緩沖區(qū)的數(shù)目減少。當(dāng)未用的緩沖區(qū)下降到很少,以致用戶進(jìn)程要從磁盤讀入塊到內(nèi)存存儲區(qū)時無法找到未用的緩沖區(qū)時,DBWR將管理緩沖存儲區(qū),使用戶進(jìn)程總可得到未用的緩沖區(qū)。
ORACLE采用 LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持內(nèi)存中的數(shù)據(jù)塊是最近使用的,使I/O最小。在下列情況預(yù)示DBWR 要將弄臟的緩沖區(qū)寫入磁盤:
1、當(dāng)一個服務(wù)器進(jìn)程將一緩沖區(qū)移入 “弄臟”表,該弄臟表達(dá)到臨界長度
時,該服務(wù)進(jìn)程將通知 DBWR進(jìn)行寫。該臨界長度是為參數(shù)DB-BLOCK-WRITE-BATCH
的值的一半。
2、 當(dāng)一個服務(wù)器進(jìn)程在 LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩沖區(qū)時,沒
有查到未用的緩沖區(qū),它停止查找并通知 DBWR進(jìn)行寫。
3、出現(xiàn)超時(每次 3秒),DBWR 將通知本身。
4、 當(dāng)出現(xiàn)檢查點時, LGWR將通知DBWR在前兩種情況下,DBWR將弄臟表中的塊寫入磁盤,每次可寫的塊數(shù)由初始化參數(shù)DB-BLOCK-WRITE-BATCH所指定。如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū),DBWR從LUR表中查找另外一個弄臟緩沖區(qū)。如果DBWR在三秒內(nèi)未活動,則出現(xiàn)超時。在這種情況下DBWR對LRU表查找指定數(shù)目的緩沖區(qū),將所找到任何弄臟緩沖區(qū)寫入磁盤。每當(dāng)出現(xiàn)超時,DBWR查找一個新的緩沖區(qū)組。每次由DBWR查找的緩沖區(qū)的數(shù)目是為寢化參數(shù)DB-BLOCK-WRITE-BATCH的值的二倍。如果數(shù)據(jù)庫空運轉(zhuǎn),DBWR最終將全部緩沖區(qū)存儲區(qū)寫入磁盤。在出現(xiàn)檢查點時,LGWR指定一修改緩沖區(qū)表必須寫入到磁盤。DBWR將指定的緩沖區(qū)寫入磁盤。
在有些平臺上,一個實例可有多個 DBWR。在這樣的實例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數(shù)DB-WRITERS控制DBWR進(jìn)程個數(shù)。
LGWR進(jìn)程:該進(jìn)程將日志緩沖區(qū)寫入磁盤上的一個日志文件,它是負(fù)責(zé)管理日志緩沖區(qū)的一個 ORACLE后臺進(jìn)程。LGWR進(jìn)程將自上次寫入磁盤以來的全部日志項輸出,LGWR輸出:
1、 當(dāng)用戶進(jìn)程提交一事務(wù)時寫入一個提交記錄。
2、每三秒將日志緩沖區(qū)輸出。
3、 當(dāng)日志緩沖區(qū)的 1/3已滿時將日志緩沖區(qū)輸出。
4、當(dāng) DBWR將修改緩沖區(qū)寫入磁盤時則將日志緩沖區(qū)輸出。
LGWR進(jìn)程同步地寫入到活動的鏡象在線日志文件組。如果組中一個文件被刪除或不可用, LGWR 可繼續(xù)地寫入該組的其它文件。
日志緩沖區(qū)是一個循環(huán)緩沖區(qū)。當(dāng) LGWR將日志緩沖區(qū)的日志項寫入日志文件后,服務(wù)器進(jìn)程可將新的日志項寫入到該日志緩沖區(qū)。 LGWR 通常寫得很快,可確保日志緩沖區(qū)總有空間可寫入新的日志項。
注意:有時候當(dāng)需要更多的日志緩沖區(qū)時, LWGR在一個事務(wù)提交前就將日志項寫出,而這些日志項僅當(dāng)在以后事務(wù)提交后才永久化。
ORACLE使用快速提交機(jī)制,當(dāng)用戶發(fā)出 COMMIT語句時,一個COMMIT記錄立即放入日志緩沖區(qū),但相應(yīng)的數(shù)據(jù)緩沖區(qū)改變是被延遲,直到在更有效時才將它們寫入數(shù)據(jù)文件。當(dāng)一事務(wù)提交時,被賦給一個系統(tǒng)修改號(SCN),它同事務(wù)日志項一起記錄在日志中。由于SCN記錄在日志中,以致在并行服務(wù)器選項配置情況下,恢復(fù)操作可以同步。
上述內(nèi)容就是PMON、SMON、DBWR與LGWR的作用有哪些,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。