Oracle background processes後台進程

來源:互聯網
上載者:User

Oracle background processes後台進程

Oracle進程類型:
對於資料庫的進程,資料庫執行個體包含或與之互動。
按照使用對象分為用戶端進程(client)ORACLE進程,ORACLE進程有分為後台進程(background)、服務進程(server)和從進程(slave)。server進程執行基於client進程的請求。
例如:server進程解析SQL查詢,將這些查詢語句存放於shared pool中,對每個查詢建立並執行查詢計劃。並且從buffer cache或磁碟中讀取資料。
 
進程結構依賴於作業系統和ORACLE資料庫可選模式。
服務(server)進程可以分為專享(dedicated)和共用(shared)服務
專享模式下的進程結構


 
共用模式下的進程結構

通過V$PROCESS視圖查看一下進程資訊:
col addr for a16
COL SPID FORMAT a8    --系統進程
COL STID FORMAT a8    --系統線程
col usrname for a20
col program for a25
select addr,pid,spid,stid,usrname,program from v$process order by stid;


用戶端(client)進程:
ps -ef | grep -e sample -e sqlplus | grep -v grep

在用戶端和服務端用以下命令查看的結果是不同的,用戶端僅顯示sqlplus進程。服務端顯示為非本地串連。
 
關於會話串連:
使用ORACLE的autotrace收集執行語句統計資訊時,會自動建立一個情境
SQL> select sid,serial#,paddr from v$session where username=user;
      SID    SERIAL# PADDR
---------- ---------- ----------------
        96          3 00000001F051C858
SQL> set autotrace on statistics;      ---跟蹤SQL語句執行計畫額外重建了一個情境
SQL> select sid,serial#,paddr from v$session where username=user;
      SID    SERIAL# PADDR
---------- ---------- ----------------
        96          3 00000001F051C858
        98          5 00000001F051C858
 
SQL> SELECT PROGRAM FROM V$PROCESS WHERE ADDR = hextoraw('00000001F051C858');
PROGRAM
---------------------------------------------------------------------
oracle@021Y-SH-BKAP (TNS V1-V3)
後台(background)進程
1234 SELECT PNAME 
FROM  V$PROCESS 
WHERE  PNAME IS NOT NULL 
ORDER BY PNAME;

後台進程可以分為強制(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,該參數是動態參數,重啟後生效。
1 show parameter 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及定位恢複起始點等。其工作模式如示:


 
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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.