ORACLE 主要後臺程序詳解
(1)SMON(System monitor):
SMON負責系統監視已經一些系統清理及恢復工作,這些工作主要包括:
a.清理臨時空間以及臨時段
SMON負責在資料庫啟動時清理臨時表空間中的臨時段,或者一些異常操作過程遺留下來的臨時段,例如,當建立索引過程中,建立期間分配給索引的Segment被標誌為TEMPORARY,如果Create Index (或rebuild Index等)會話因某些原因異常中斷,SMON負責清理這些臨時段。
b.接合空閒空間
在DMT(字典管理表空間)中,SMON負責把那些在表空間中空閒的並且互相是鄰近的Extent接合成一個較大的空閒擴充套件區,這需要表空間的pctincrease設定為非零值。
c.執行例項恢復(Instance recovery)
在例項恢復過程中,SMON的工作包括三個環節:應用Redo執行前滾、開啟資料庫提供訪問、(UNDO)回滾未提交資料
(2)PMON(Process Monitor)
PMON 用於監視伺服器程序的執行,並且在伺服器失敗時清除改服務程序;
負責對失敗的使用者程序或服務程序進行恢復,並釋放程序所佔用的資源。
使用者可能關閉客戶端程式,但是卻沒有從資料庫中退出,或者由於網路的突然中斷而造成一個數據庫連線的異常終止。這時,Oracle將PMON程序來啟動清除中斷或失敗的使用者程序,包括清除非正常中斷的使用者程序留下的孤兒會話,回退未提交的事務,釋放會話所佔用的鎖、SGA區、PGA區等資源。
此外,它還會定期的檢查排程程式和服務程式程序的狀態。
SMON相似,PMON也會定期的被喚醒。
(3)DBWR(Database Writer)
用於將資料快取記憶體的髒資料寫入到資料檔案中,當執行DML操作時,服務程序會修改快取區,並且將這些快取區標識為”髒緩衝區”,將來將謝謝髒緩衝區資料會由後臺程序DBWR寫入到資料檔案,預設情況下只有一個DBW0程序,通過設定初始化引數db_writer_process可以定義最多10個DBWR程序。
觸發DBWR程序的事件:
1.伺服器程序不能找到空閒緩衝區:當用戶程序在LRU列表中搜索了一定數量的快取塊後,仍然沒有找到可用的空閒快取塊,DBWR程序將啟動,把髒快取塊寫入資料檔案。
2.Checkpoint發生時,DBWR程序把所有的髒快取塊從LRU列表中移入到寫入列表,並寫入到資料檔案。
3.資料庫快取塊中的寫入列表的長度達到一定值的時候,DBWR將寫入列表中的髒快取塊寫入資料檔案。
4.每過3秒鐘,DBWR把髒快取塊從LRU列表移到寫入列表,一旦寫入列表長度達到一定值,DBWR便將資料寫入資料檔案。
5.當表空間offline時,DBWR把所有屬於該表空間的髒快取塊從LRU列表移到寫入列表,並且開始寫入資料檔案。
6.當表空間開始熱備時(alter tablespace … begin backup),DBWR把所有屬於該表空間的髒快取塊從LRU列表移到寫入列表,並且開始寫入資料檔案。
(4)LGWR(Log Writer)
LGWR用於將重做日誌緩衝區所記載的全部內容寫入到重做日誌:
1,每三秒鐘超時(timeout):
當LGWR處於空閒狀態時,它依賴於rdbmsrpcmessage等待事件,處於休眠狀態,直到三秒時間到,如果這個時候LGWR發現有Redo資訊需要寫出的話,那麼LGWR將執行寫的操作,logfilellel write等待事件將會出現。
2.閥值的達到:
Redo log buffer 1/3 滿;
Redo log buffer 擁有 1MB 的資料;
引數_log_io_size的設定很重要,一般為log_buffer的1/3大小
3.使用者提交(commit):
當一個transaction提交的時候,在Redostream中將記錄一個提交標誌。在這些Redo被寫到磁碟上之前,這個transaction是不能恢復的。所以,在transaction返回成功標誌之前,必須等待LGWR寫的完成。程序通知LGWR寫,並且以logfilesync事件開始休眠。超時為1秒
4.在DBWn寫之前:
如果DBWR將要寫出的資料的高RBA超過LGWR的on-diskRBA,則DBWR將通知LGWR執行寫的操作,在Oracle8i之前,此時DBWR將等待Logfilesync事件。從Oracle8i開始,DBWR把這些block(將要寫出的block,這種block的高RBA超過了LGWR的on-diskRBA)放入defer佇列中,同時通知LGWR執行Redo寫出。
注:log buffer space等待事件說明log buffer空間不夠用了。
(5)CKPT(Checkpoint Process)
CKPT用於發出檢查點(Checkpoint),並且檢查點會同步資料庫的資料檔案、控制檔案和重做日誌。當發出檢查點時,後臺程序CKPT會將檢查點時刻的SCN(System Change Number)寫入到控制檔案和資料檔案頭部,同時會促使後臺程序DBWR將所有髒緩衝區資料寫入到資料檔案中:
觸發條件:
◆日誌切換;
◆關閉例程(shutdown abort除外)
◆手工檢查點操作(ALTER SYSTEM CHECKPOINT);
◆由初始化引數FAST_START_MTTR_TARGET強制發出檢查點;
(6)ARCH(Archive Process)
ARCH用於將重做日誌的事務變化賦值到歸檔日誌中,只有ARCHIVELOG模式下才會被啟動。預設情況下只會啟動兩個歸檔過程(ARC0,ARC1),通過設定初始化引數log_archive_max_process可以最多定義10個歸檔程序.在ARCHIVELOG模式下,當進行日誌切換時會自動生成歸檔日誌;
(7)RECO (恢復程序)用於解決分散式資料庫中的故障問題,只有在平臺支援 Distributed Option (分散式選項)且初始化引數檔案中的 DISTRIBUTED_TRANSACTIONS 引數 值大於零時才建立這個程序。
(8)CJQn Oracle 的作業佇列管理依賴於後臺程序的執行,它們進行資料重新整理及其他定 期的作業。排程程序CJQ0,選擇將要執行的作業並擴充套件作業佇列程序(J000-J999)以執 行這些作業,其最大數量由初始化引數JOB_QUEUE_PROCESSES 決定
(9)LMSn 當使用Oracle 真正的應用叢集(Oracle Real Application Clusters)選項 時,多個LMS 後臺程序(命令為 LCK0-LCK9)用於解決內部例項的鎖定問題
(10) Dnnn (排程程式程序)是共享伺服器結構的一部分,有助於減少處理多個連線所 需要的資源。對於資料庫伺服器支援的每一種協議必須至少建立一個排程程式程序,排程程式程序在資料庫啟動時,基於初始化引數 DISPATCHERS 建立,也可以在資料庫開啟時創 建或取消。
(11)Server:Snnn 建立伺服器程序來管理需要專用伺服器的資料庫連線。伺服器程序可以資料檔案進行I/O 操作。它的最大數量由初始化引數 SHARED_SERVERS 確定
(12)Pnnn(並行查詢伺服器程序) 當資料庫內部啟用並行查詢選項,一個查詢的資源要求可以分佈在多個處理器中。當例項啟動時,就啟動指定數量的並行查詢伺服器程序,其數量由引數:PARALLEL_MIN_SERVERS 引數決定。這樣的程序出現在作業系統級,其命名為 P000、P0001 等。其最大數量由 PARALLEL_MAX_SERVERS 決定。
(13)MMON(Manageability Monitor) process was introduced in 10g and is associated with the Automatic Workload Repository new features used for automatic problem detection and self-tuning. MMON writes out the required statistics for AWR on a scheduled basis.
(14) MMAN(Memory Manager)自動記憶體管理;