天天看點

Oracle background processes背景程序

http://docs.oracle.com/database/121/CNCPT/process.htm

Oracle程序類型:

對于資料庫的程序,資料庫執行個體包含或與之互動。

按照使用對象分為用戶端程序(client)ORACLE程序,ORACLE程序有分為背景程序(background)、服務程序(server)和從程序(slave)。server程序執行基于client程序的請求。

例如:server程序解析SQL查詢,将這些查詢語句存放于shared pool中,對每個查詢建立并執行查詢計劃。并且從buffer cache或磁盤中讀取資料。

程序結構依賴于作業系統和ORACLE資料庫可選模式。

服務(server)程序可以分為專享(dedicated)和共享(shared)服務

專享模式下的程序結構

Oracle background processes背景程式

共享模式下的程序結構

Oracle background processes背景程式

通過V$PROCESS視圖檢視一下程序資訊:

用戶端(client)程序:

在用戶端和服務端用以下指令檢視的結果是不同的,用戶端僅顯示sqlplus程序。服務端顯示為非本地連接配接。

關于會話連接配接:

使用ORACLE的autotrace收集執行語句統計資訊時,會自動建立一個場景

背景(background)程序

背景程序可以分為強制(mandatory)程序、可選(Optional)程序和從(Slave)程序

強制(mandatory)程序包括:

PMON  --監控其他背景程序,當服務或排程程序異常終斷。PMON被用于清理并釋放用戶端程序使用的資料buffer cache和資源。如:PMON重置事務表的狀态,釋放閑置的鎖并且移除閑置的程序ID。

LREG 執行個體動态注冊監聽程序。當執行個體啟動時,LREG程序判斷監聽器是否運作。該程序在12c被引入。

SMON 系統監控程序負責多個系統級的清理工作,于之相關的包括:

1、執行執行個體恢複。

2、恢複因檔案讀或表空間offline錯誤導緻終斷的事務。

3、清理臨時的未使用的段。

4、通過表空間的字典管理合并連續空閑的區間。

SMON會定期檢查是否需要使用,其他程序需要時也會調用SMON。

DBW 資料庫寫程序,将Buffer cache中修改的内容寫到資料檔案中。通常一個DBW程序就可以滿足系統的寫需求,也可以開啟多個來改進性能。範圍從DBW0-9,DBWa-z,DBW36-99

修改DBW程序數的參數db_writer_processes,該參數是動态參數,重新開機後生效。

以下兩個條件觸發DBW程序的寫操作:

1、當服務程序掃描buffer池,當在閥值内找不到可用的buffers時,觸發DBW将dirty buffers異步的寫到磁盤。

2、DBW定期的寫buffers并觸發checkpoint,而這些checkpoint在redo線程中就是實力恢複的開始點。記錄的checkpoint的位置取決于最早的dirty buffer。

大多數情況,DBW寫入磁盤的塊都是散列的,這樣的速度會比順序的寫入慢,通過LGWR,DBW執行

多塊并行寫來改進效率。所寫塊的數量有作業系統來決定。

LGWR  該程序用于管理online redo log buffer。LGWR将buffer中的部分内容記錄到redo日志中。分離改動buffer的操作。将dirty buffer分散的寫入磁盤,并快速連續的将redo寫入磁盤。

下列情況,LGWR把上次寫出操作之後所有的改動過的buffer寫出

1、使用者送出事務(commit指令)。

2、發生online redo log的切換。

3、從上次LGWR寫出後又過了三秒。

4、 在redo log 中已緩存了1/3或1M的緩存資料。

5、DBW必須将改動的buffer寫出到磁盤。

在DBW寫出髒資料之前,資料庫必須将與改變的buffer相關的redo記錄寫出到磁盤(write-ahead protocol),如果這些redo記錄未寫出,DBW會向LGWR程序發出信号,并等待LGWR程序完成記錄的寫出後,再将髒資料寫出到磁盤。

CKPT 該程序主要用于更新control file和資料檔案頭的checkpoint資訊,并觸發DBW的寫出操作。checkpoint資訊包含checkpoint計數點,SCN及定位恢複起始點等。其工作模式如下圖示:

Oracle background processes背景程式

MMON/MMNL 與AWR(Automatic Workload Repository)任務相關。如,當測算的結果超過閥值時MMON記錄狀态并建立狀态快照,抓取最近的SQL對象改動的統計值。MMNL則将SGA buffer中的ASH(Active Session History)狀态寫出到磁盤,當ASH buffer滿時寫出。

RECO

在分布式資料庫中,RECO(recoverer process)自動處理分布事務中的錯誤,一個節點的RECO自動連接配接其他庫的一個不确定的分布事務。當RECO重連,會自動解決所有的不确定事務,移除每一個庫中挂起的事務表中與這些不确定事務相關的行。

可選(Optional)程序:

ARCn 當發生重做日志切換時,歸檔程序将線上的重做日志拷貝到線下存儲。該程序也可以收集重做事務資料并傳輸到備庫應用。ARCn程序僅當資料庫為歸檔模式時啟用且自動歸檔開啟。

CJQ0和Jnnn

運作工作隊列程序,Oracle動态的管理隊列程序,是以發生請求時允許工作隊列用戶端使用多個工作隊列程序。當這些程序空閑時,資料庫使用新的程序釋放資源。

動态工作隊列程序可以按照給定的間隔時間同時運作多個工作。這些事件序列如下:

1、CJQ0  當資料庫計劃任務需要時,工作協調程序自動啟動和關閉,工作協調程序定期的從JOB$表中選擇工作執行,新工作的選擇根據時間排序。

2、工作協調程序動态的生成工作隊列從程序(Jnnn)來執行工作。

3、工作隊列程序執行一個被CJQ0選中的工作,每一個工作隊列程序僅執行一個工作,直到該工作完成。

4、程序完成單個工作後,會執行下一個工作,如果沒有可執行的計劃,則該程序處于休眠狀态。

通過參數job_queue_processes參數來指定工作隊列程序的最大值。

FBDA

SMCO