Oracle體繫結構之進程

來源:互聯網
上載者:User

標籤:檔案恢複   自己   分布式   tns   database   診斷   不可用   額外   list   

 

Oracle體繫結構之進程

一、概述

  Oracle中的每個進程都要執行一個特定的任務(或者一組任務),每個進程都會為自己分配記憶體(PGA)來完成它的任務。一個Oracle執行個體主要有以下3類進程:

  (1) 伺服器處理序(server process):伺服器處理序包括專用伺服器和共用伺服器,用來處理你提交所有SQL。當你向資料庫提交一個SELECT * FROM EMP查詢時,就會有一個ORACLE專用/共用伺服器處理序來解析這個查詢,把它放到共用池中(或者最好能發現這個查詢已經在共用池中)。這個進程要自行制定查詢計劃(如果有必要),然後執行它,並儘可能地在緩衝區快取中找到必要的資料,或者將從磁碟中將資料讀入緩衝區快取。

  (2) 後台進程(background process):這些進程隨著資料庫的啟動而啟動,用於完成各種維護工作。

  (3) 從屬進程(slave process):類似後台進程,代表後台進程或伺服器處理序完成一些額外的工作。

二、伺服器處理序

  (1) 專用伺服器串連

  採用專有伺服器串連時,會在伺服器上得到一個針對這個串連的專用進程。用戶端串連和伺服器處理序(或者有可能是線程)之間有一個一對一的映射關係。顯示了查詢專用伺服器處理序和本地用戶端進程。

   

  

  (2) 共用伺服器串連

  共用伺服器串連要求必須使用Oracle Net,即使用戶端和伺服器都在同一台機器上也不例外。如果不使用Oracle TNS監聽器,就無法使用共用伺服器。

用戶端應用(其中連結了Oracle庫檔案)會與一個調度器程式物理串連在一起。調度器程式只負責從用戶端應用接收入站請求,並把它們放入SGA中的一個請求隊列。共用伺服器處理序池(其中包括了一些預先建立好的共用伺服器處理序)中第一個可用的進程會從隊列中依次擷取請求,並附加上相關會話的UGA。共用伺服器處理序將會處理這個請求,並將得到的輸出放在響應隊列中。調度器程式持續監控著響應隊列中的結果,並將結果傳回給用戶端應用。

  (3) 資料庫常駐串連池

  資料庫常駐串連池(DRCP)是串連資料庫並建立會話的一種可選方法。有些應用介面自身不支援高效串連池(如PHP),DRCP就是為這種應用介面設計的一種更為高效的串連池方法。

三、後台進程

  Oracle執行個體由兩個部分組成:SGA和一組後台進程。如顯示了資料庫的後台進程。

   

  (1) PMON: 進程監控器

  進程監控器(process monitor)負責在串連出現異常終止後進行清理工作,還負責監控其他的Oracle後台進程,並在必要的時候(而且可能)時重啟這些後台進程。

註:在Oracle Database12C之前,PMON還負責處理註冊監聽的任務。從Database 12C開始,改由專門的監聽註冊後台進程(LREG)來註冊執行個體和服務到監聽器。

  (2) LREG: 監聽註冊進程

  從Database 12C開始,負責將資料庫執行個體和服務註冊到監聽器中。當一個資料庫執行個體啟動時,LREG進程會去查看監聽連接埠(一般為1521)是否已經有監聽器在上面運行了。我們也可以通過LOCAL_LISTENER參數明確地指定當前的監聽連接埠,也可以通過使用REMOTE_LISTENER參數來讓LREG去註冊服務到一個遠程監聽器。

  (3) SMON: 系統監聽器

  SMON所做的工作包括以下幾種:

  1) 清理暫存資料表空間;

  2) 合并空閑資料表空間;

  3) 針對原來停用檔案恢複活動的事務;

  4) 執行RAC中失敗節點的執行個體恢複;

  5) 清理OBJ$

  6) 管理撤銷段

  7) 復原段離線

  (4) RECO: 分散式資料庫恢複

  RECO的核心任務:由於兩階段交易認可(2PC)期間的奔潰或串連丟失等原因,有些事務可能還保持在準備狀態。這個進程就是要恢複這些事務。

  (5) CKPT:檢查點進程

  實施檢查點是DBWn進程的工作。CKPT僅僅是協助實際運行檢查點的進程,來更新資料檔案的檔案頭。

  (6) DBWn: 資料庫塊寫入器

  資料庫塊寫入器是負責將髒塊寫入磁碟的後台進程。DBWn的效能至關重要,如果它寫出塊的速度不夠快,不能很快地釋放緩衝區,就會看到Free Buffer Waits和Write Complete Waits這兩個等待時間的數量和等待時間開始增加。

  在Oracle Database 11g中,我們最多可以配置36個DBWn進程;而到了Database 12C,我們可以配置多達100個DBWn進程。

  在最好的情況下,DBWn使用非同步I/O將塊寫至磁碟。塊寫入器進程會將塊分散地寫到磁碟的各個位置,也就是說DBWn會執行大量的離散寫。相比於LGWR的順序寫,離散寫的速度慢很多,這也是線上重做日誌存在的必要性。

  (7) LGWR: 日誌寫入器

  LGWR進程負責將SGA中重做日誌緩衝區中的內容重新整理輸出到磁碟。LGWR通過順序寫,只把有變化的位元組寫出到磁碟。觸發LGWR進行寫操作的條件有以下三個:

  1) 每過三秒;

  2) 一個提交或者復原發起時;

  3) LGWR被告知進行記錄檔切換時;

  4) 重做日誌緩衝區1/3滿,或者已經包含1MB的緩衝資料。

  (8) ARCn: 歸檔進程

  ARCn進程的任務:當LGWR將一個線上重做記錄檔填滿時,將其複製到另一個位置。此後這些歸檔的重做記錄檔可以用來完成介質恢複。線上重做日誌用於在出現掉電(執行個體終止)時“修正”資料檔案,而歸檔重做記錄檔則出現在磁碟故障時用於“修正”資料檔案。

  (9) DIAG: 診斷進程

  利用ADR(進階診斷庫,Advanced Diagnostic Repository),它會負責監視執行個體的整體狀況,而且會捕獲處理執行個體失敗時所需的資訊。這既適用於單個執行個體配置,也適用於多執行個體的RAC配置。

  (10) FBDA: 閃回資料歸檔進程

  閃回資料歸檔功能是指能夠閃回查詢(as of查詢)很久以前的資料。這種長期曆史查詢功能是通過維護行的曆史變化記錄,即記錄一個表中的每一行的資料變化來實現的。FBDA負責維護這個曆史。

  (11) DBRM : 資料庫總管進程

  DBRM進程會去實施那些為一個資料庫執行個體配置的資源計劃。它會設定指定的資源計劃,執行相關的各種操作來實施/實現這些資源計劃。資源管理員允許資料庫管理員對資料庫執行個體所用的資源、應用訪問資料庫所用的資源或者單個使用者訪問資料庫所用的資源進行細粒化的控制。

  (12) GEN0: 通用任務執行進程

  通用任務執行進程是為資料庫提供了一個執行通用任務的進程。這個進程的惡只要目標是分擔進程中某些可能造成進程阻塞的處理過程(這些處理過程會造成一個進程的停止),並將它們放在後台中完成。

  (13)其他一些進程

四、工具後台進程

  這些後台進程都是可選的。下面為一些常用的可能遇到的進程:

  (1)CJQ0和Jnnn進程:作業隊列

  作業隊列進程監控一個作業表,這個作業表告訴它何時需要重新整理系統中的各個快照。

  (2) QMNC和Qnnn:進階隊列

  QMNC進程會監控進階隊列,並在某個等待訊息變為可用狀態時,提醒其出隊。

  (3) EMNC:事件監視器進程

  EMMC進程是進階隊列體繫結構的一部分,用於通知隊列去訂閱它們感興趣的訊息。

  (4) MMAN:記憶體管理器

  這個進程存在於Oracle Database 10g及以上的版本,用來自動化佈建SGA大小。MMAN進程負責各個共用記憶體組件(包括預設緩衝區池、共用池、Java池和大池)的大小設定和大小調整。

  (5) MMON、MMNL和Mnnn:可管理性監視器

  這些進程用於向自動工作負載存放庫(AWR)中填充資訊。MMNL進程會分局調度將各種統計資訊沖SGA重新整理輸出到資料庫表中。MMON進程用於自動監測資料庫效能問題,並實現自我調優功能。Mnnn進程類似於作業隊列的Jnnn或Qnnn進程。

  (6) CTWR:修改跟蹤進程

  CTWR進程負責維護修改追蹤檔案。

  (7) RVWR:恢複寫入器

  當使用FLASHBACK DATABASE命令時,它負責維護快速恢複區中塊的“前”映像。

  (8) DMnn/DWnn:資料泵主進程/背景工作處理序

  資料泵主進程(DMnn)收集用戶端進程的所有輸入,然後協調背景工作處理序(DWnn)執行具體工作,DMnn進程完成中繼資料和資料的具體處理。

  (9) TMON/TT00:傳輸監視器和重做傳輸從屬進程

  Oracle Database 12c中的兩個Data Guard相關進程,會隨資料庫執行個體的啟動而啟動。TMON將會啟動並監視一定數量的TT00進程。TT00進程用來通知LGWR進程去產生心跳重做。

  (10) 其他工作後台進程

五、從屬進程

  (1) I/O從屬進程

  I/O從屬進程用於在不支援非同步I/O的系統和裝置上類比非同步I/O,如磁帶裝置。由I/O從屬進程來等待慢速的裝置,而調用它們的進程則得以脫身,可以做其他重要的工作:收集下一次要寫的資料。

  有兩個參數控制著I/O從屬進程的使用:

  1) BACKUP_TAPE_IO_SLAVES:指定RMAN是否使用I/O從屬進程將資料備份、複製或恢複到磁帶上,該參數是為磁帶裝置設定的。當該值為TRUE時,則使用一個I/O從屬進程讀寫磁帶裝置;當該值為FALSE時,則用來執行本份的專用伺服器處理序會直接存取磁帶裝置。

  2) DBWR_IO_SLAVES:指定了DBW0進程所用的I/O從屬進程的個數。該值若為非0值,LGWR和ARCn也會使用自己的I/O從屬進程。

  DBWn I/O從屬進程的名字是I1nn,LGWR I/O從屬進程的名字是I2nn。

  (2) pnnn:並存執行查詢服務器

  對於SELECT、CREATE TABLE、CREATE INDEX、UPDATE等SQL語句,建立一個執行計畫,其中包含了可以同時執行的多個(子)執行計畫。將每個執行計畫的輸出合并在一起構成一個更大的結果,其目標是用串列執行這個操作所需時間的幾分之一來完成同樣的工作。

  在Oracle Database 12C之前,並存執行伺服器的預設數量是0,我們可以通過修改PARALLEL_MIN_SERVERS參數值來修改它,該值預設為0;而在Oracle Database 12C開始,PARALLEL_MIN_SERVERS預設值已經設定為一個非0值(根據CPU_COUNT * PARALLEL_THREADS_PER_CPU * 2得到)。

Oracle體繫結構之進程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.