您好,登錄后才能下訂單哦!
本篇文章為大家展示了PMON、SMON、DBWR與LGWR的作用有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
PMON進程:該進程在用戶進程出現故障時執行進程恢復,負責清理內存儲區和釋放該進程所使用的資源。例:它要重置活動事務表的狀態,釋放封鎖,將該故障的進程的ID從活動進程表中移去。PMON還周期地檢查調度進程(DISPATCHER)和服務器進程的狀態,如果已死,則重新啟動(不包括有意刪除的進程)。
PMON有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。
PMON進程還負責在反常中斷的連接之后的清理工作。例如,如果因某些原因專用服務 “故障”或被kill掉,PMON就是負責處理(恢復或回滾工作)和釋放你的資源。PMON將發出未提交工作的回滾,釋放鎖,和釋放分配給故障進程的SGA資源。
除了在異常中斷之后的清理外, PMON監控其他oracle后臺進程,如果有必要(和有可能)重新啟動他們。如果共享服務或一個分配器故障(崩潰),PMON將插手并且重啟另一個(在清理故障進程之后)。PMON將觀察所有Oracle進程,只要合適或重啟他們或中止進程。例如,在數據庫日志寫進程事件中,LGWR故障,實例故障。這是一個嚴重的錯誤,最安全的處理方法就是去立即終止實例,讓正常的恢復處理數據。(注意這是很少發生的事情,應該立即報告oracle支持)。
PMON為實例做的另一件事是去使用 Oracle TNS監聽器登記。當一個實例開啟的時候,PMON進程投出眾所周知的端口地址,除非指向其他,來看是否監聽器正在開和運行著。眾所周知/默認端口是使用1521。現在,如果監聽器在一些不同端口開啟會發生什么?這種情況,機制是相同的,除了監聽器地址需要被LOCAL_LISTENER參數明確指定。如果監聽器運行在庫實例開啟的時候,PMON和監聽器通訊,傳到它相關參數,譬如服務器名和實例的負載度量。如果監聽器沒被開啟,PMON將周期性的試著和它聯系來登記自己。
SMON進程:該進程實例啟動時執行實例恢復,還負責清理不再使用的臨時段。在具有并行服務器選項的環境下, SMON對有故障CPU或實例進行實例恢復。SMON進程有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。
SMON還負責做所有系統級的工作。相對于 PMON對單個進程感興趣,SMON是一個系統級別的觀點,是一種用于庫的“垃圾收集者”。它做的工作包括如下7件:
1 清理臨時表空間:伴隨這 “真正”的臨時表空間的出現,清理臨時表空間的雜事已經減輕了,但它還沒完全消失。例如,當建立一個索引,在創建期間分配給索引的擴展區被標志為TEMPORARY。如果Create Index會話因某些原因異常中斷,SMON負責清理他們。其他操作創建的臨時擴展區,SMON同樣會負責。
2 接合空閑空間:如果你正使用數據字典管理表空間, SMON負責把那些在表空間中空閑的并且互相是鄰近的extent接合成一個較大的空閑擴展區。這發生僅在帶有默認的pctincrease設置為非零的存儲子句的字典管理表空間。
3 把對于不可用文件的事務恢復成活動狀態:它的角色類似在庫啟動期間。這時,因為文件不能用于恢復, SMON恢復在實例/崩潰恢復期間被跳過的故障事務。例如,文件可能已經在不可用或沒裝載的磁盤上。當文件變可用了,SMON將恢復它。
4 執行一個 RAC中故障節點的實例恢復:在一個oracle RAC配置中,當群集中的一個庫實例失敗(例如,實例正執行的機器故障了),一些群集中的其他節點將開啟故障的實例的重做日志文件,為故障實例執行所有數據的恢復。
5 清理 OBJ$:OBJ$是一個包含庫中幾乎每一個對象(表,索引,觸發器,視圖等等)的記錄的行級數據字典表。許多次,這兒存在的記錄代表已刪對象,或代表不在這兒的對象,在oracle的信賴機制中被使用。SMON是刪除這些不在被需要的行的進程。
6 收縮回滾段: SMON將執行回滾段的自動收縮到它的optimal尺寸,如果它被設置。
7 “脫機 ”回滾段:對于DBA來,讓一個有active事務的回滾段,脫機或不可用,這事是可能的。Active事務正使用這脫機回滾段是可能的。在這情況下,回滾不是真正的脫機;它被標志為“懸掛offline”。在后臺進程中,SMON將周期性盡力讓它真正脫機,直到成功。它做許多其他事情,譬如存在DBA_TAB_MONITORING視圖中的監控統計數據的洗刷,在SMON_SCN_TIME表中發現的時間戳定位信息的SCN的洗刷,等等。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記錄在日志中,以致在并行服務器選項配置情況下,恢復操作可以同步。
上述內容就是PMON、SMON、DBWR與LGWR的作用有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。