ORACLE的後臺進程

原文發表在http://l4j.cc/2019/04/25/oracle-background-process/算法

 回顧了一下ORACLE後臺進程相關的知識,寫篇博客記錄一下。數據庫

 認識ORACLE實例的兩大基礎內存結構和後臺進程。ORACLE的後臺進程架構根據操做系統的不一樣有可能存在差別。對於WINDOWS系統,ORACLE的後臺進程是做爲操做系統中進程的執行線程運行的。而LINUX或者UNIX系統,能夠是操做系統進程也能夠是進程中的執行線程。須要說明的是,在12c以前,ORACLE進程在Linux和UNIX系統中不能做爲線程運行;12c開始,多線程Oracle數據庫模型纔開始讓oracle數據庫能夠做爲操做系統線程在單獨的地址空間運行,能夠經過將系統參數THREADED_EXECUTION設置爲TRUE,讓數據庫運行在線程模式。緩存

 ORACLE進程架構能夠分爲客戶端進程和服務端進程。服務端進程又包含了server process,background process和做爲server process與background process輔助的slave process。經過V$PROCESS能夠查看oracle後臺進程對應的操做系統線程的線程ID和進程ID。下面主要對後臺進程進行了一個簡單的概括。服務器

1.Process Monitor Process (PMON) Group

 其中包含了三類後臺進程PMON, Cleanup Main Process (CLMN), 和 Cleanup Helper Processes (CLnn)。主要負責監控以及清理其餘的進程,在某些狀況下PMON進程組也負責對損壞的不可恢復的資源進行隔離,避免數據庫實例關閉。  PMON進程檢測後臺進程是否終止,並負責對必要的進程嘗試恢復。PMON會將清理工做委託給CLMN進程做爲清理工做的主進程,CLMN會週期性的去清理中斷的進程、會話、事務、網絡鏈接、空閒回話以及超時的網絡鏈接和事務等。CLnn協助CLMN清理中斷的進程和會話。CLnn能夠存在多個,數量和當前須要清理的工做量和當前清理效率成正比。網絡

2.Process Manager (PMAN)

 負責監視、啓動和關閉如下進程:多線程

  • 調度器和共享服務進程
  • pooled server process
  • Job queue processes
  • 可重啓的後臺進程

3.Listener Registration Process (LREG)

 負責數據庫實例監聽註冊的相關任務。在12c以前的版本,該部分工做由PMON進程負責。架構

4.System Monitor Process (SMON)

 負責各類系統級的清理工做,SMON會週期性的檢查是否須要進行如下工做:oracle

  • 在數據庫啓動時負責實例恢復
  • 恢復由於數據文件或者表空間錯誤而在實例恢復階段跳過的事務。當數據文件或者表空間online的時候執行中斷事務的恢復。
  • 清理再也不使用的temporary segments
  • 在dictionary-managed表空間中合併連續的extents

5.Database Writer Process (DBW)

 該進程負責將buffer cache的髒數據寫入到磁盤。DBW進程根據LRU算法,將最近最少被使用的buffer寫入磁盤,以讓其它的數據內容能夠寫入該緩存,若是寫出磁盤的速度不夠快,那麼可能致使Free Buffer Waits等等待事件。大部分狀況只須要一個DBW(DBW0)進程就足夠了,可是能夠經過DB_WRITER_PROCESSES參數(其默認值爲1或者1/8CPU數)來配置多個DBW進程(DBW1 through DBW9, DBWa through DBWz, and BW36 through BW99)來知足較大數據量的寫入工做,此時也能夠開啓異步I/O來提高寫的性能。  存在如下狀況時,DBW進程會開始工做:異步

  • 當服務器進程在BUFFER CACHE的threshold之下沒法找到乾淨可用的內存空間時
  • 數據庫執行checkpoint操做時
  • 修改表空間或數據文件off line時

6.Log Writer Process (LGWR)

 進程負責將online redo log buffer的數據寫入到在線重作日誌,其會記錄全部的DML和DDL操做,用於實例的恢復。如下狀況該進程會將buffer的數據寫出:性能

  • 用戶提交事務
  • 執行日誌切換
  • 每3S按期執行一次
  • redo log buffer使用了1/3以上或則達到了1mb
  • 根據write-ahead協議,DBW進程執行數據寫入以前會先執行online redo log的寫入

 通常狀況下會建立多組online redo log file,並在其餘地方建立相應的鏡像,避免日誌組所有不可用致使沒法正常使用數據庫。

7.Checkpoint Process (CKPT)

 負責更新控制文件和數據文件頭的檢查點信息,其中包括檢查點位置,SCN號,online redo log開始恢復的位置。檢查點在如下狀況可能發起:

  • 數據庫一致性關閉的時候
  • ALTER SYSTEM CHECKPOINT語句手動執行
  • Online redo log 切換時
  • 執行ALTER DATABASE BEGIN BACKUP語句時
  • 將表空間或者數據文件切換爲只讀或者離線
  • 執行ALTER TABLESPACE BEGIN BACKUP命令
  • DBW進程寫的時候,可是此時只將檢查點信息寫入控制文件,而不會寫到數據文件頭

8.Manageability Monitor Processes (MMON and MMNL)

 執行與AWR相關的任務。

9.Archiver Processes (ARCn)

 僅在歸檔模式下存在,將online redo log files歸檔到離線存儲(歸檔日誌文件)中。還能夠收集事務的重作數據並將其傳輸到備用數據庫目標。

10.Job Queue Processes (CJQ0 and Jnnn)

 CJQ0 and Jnnn用戶執行用戶建立的定時做業。CJQ0根據ORACLE SCHEDULER週期性的去遍歷JOB$表來獲取須要執行的做業。獲取到做業後,建立Jnnn從屬進程來執行相應的JOB。當完成相應做業以後繼續輪詢是否還有須要執行的做業。若是暫時沒有做業須要執行,它會進入休眠狀態,並週期性的被喚醒來輪詢是否有須要執行的做業。當超出指定的間隔後,該進程會被終止。  能夠經過JOB_QUEUE_PROCESSES 系統參數來指定最大的Jnnn進程數。

相關文章
相關標籤/搜索