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得到)。


※vuex所有核心概念完整解析State Getters Mutations Actions
※mysql索引——從一次慢查詢優化說起
※記5.28大促壓測的性能優化—線程池相關問題
※「Netty」UDP廣播事件
TAG:達人科技 |
※動作—功能動作訓練體系Movement,Fuctional movement system
※RoboSense聯手地平線、菜鳥等合作夥伴發布Smart Sensor System戰略體系
※通過區塊鏈構建分散式信用數據體系,Distributed Credit Chain打造去中心化的金融生態系統
※Jmeter體系架構分析
※我的Weekly、Daily體系
※愛德萬收購Astronics半導體系統測試部
※Maxim TTS 部常務董事Anders Reisch談高效技術服務體系
※會員體系PK:亞馬遜Prime依然殺不死Costco
※Curium創始人和首席執行官Hanan Terkel:以色列創新生態系統如何運作——六大要素、獨特文化與國防科技體系
※在現有法律體系下,如何進行正當防衛?Lawyerlogic
※整個MacBook產品體系的入門之作
※DxOMark推出Selfie前置攝像頭評測體系
※多智能體系統創始人 Victor Lesser:深度學習之外,AI 其他領域亦有所成就
※將質量管理體系融入造車的每一環,探訪蔚來NIO Quality體系
※微軟推出自主版本Linux,構建物聯網Azure Sphere體系
※講座信息 | George Cardona:Pā?ini(波你尼),Pā?ini』s Kārakas波你尼語法體系中的「作者」
※Azzedine Ala?a 的反時裝體系啟示錄
※Unity引擎現已支持NS主機的Labo VR硬體系統
※乾貨!買澳洲酒之前必須了解的James Halliday評分體系!
※Facebook壟斷性權力之下,全新信用體系將會誕生