Oracle 面試寶典 - 進程結構篇
我們提供的服務有:成都網站制作、成都網站建設、微信公眾號開發(fā)、網站優(yōu)化、網站認證、雙流ssl等。為上千多家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的雙流網站制作公司
Oracle 數(shù)據庫是以單進程還是多進程方式運行的?
在Windows 平臺下, Oracle 數(shù)據庫是以單進程 (oracle.exe) 多線程方式運行。
在Linux/Unix 平臺下, Oracle 數(shù)據庫通常是以多進程方式運行。
到了12c 這個版本, Oracle 在 Unix/Linux 平臺上做出了一些改變,引入了多線程的模式。
這個特性由threaded_execution 參數(shù)來控制,通過這個參數(shù),可以控制數(shù)據庫以多進程方式運行或者以多線程方式運行,該參數(shù)默認是 false 。數(shù)據庫以多進程方式運行。
怎么理解進程和線程?
進程是表示資源分配的基本單位,又是調度運行的基本單位。線程是進程中執(zhí)行運算的最小單位,亦即執(zhí)行處理機調度的基本單位。如果把進程理解為在邏輯上操作系統(tǒng)所完成的任務,那么線程表示完成該任務的許多可能的子任務之一。一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。線程是操作系統(tǒng)可識別的最小執(zhí)行和調度單位。
看到知乎上,一位名為南理漢子的作者回答特別新穎:
開個QQ ,開了一個進程;開了迅雷,開了一個進程。在 QQ 的這個進程里,傳輸文字開一個線程、傳輸語音開了一個線程、彈出對話框又開了一個線程。所以運行某個軟件,相當于開了一個進程。在這個軟件運行的過程里(在這個進程里),多個工作支撐的完成 QQ 的運行,那么這“多個工作”分別有一個線程。所以一個進程管著多個線程。通俗的講:“進程是爹媽,管著眾多的線程兒子” ...
Oracle 數(shù)據庫中有哪幾類進程?
1 客戶 進程
2 服務 進程
3 后臺進 程
請分別介紹下 客戶 進程、 服務器 進程、后臺進 程 ?
1 客戶 進程
當用戶運行一個應用程序( 如 Pro*C 程序或 SQL*Plus) 時,操作系統(tǒng)創(chuàng)建一個客戶端進程 ( 有時稱為用戶進程 ) 來運行用戶應用程序??蛻舳藨贸绦驅? 和 Oracle 數(shù)據庫 相連 ,以提供與數(shù)據庫通信所需的api 。
客戶 進 程與直接與實例交互的Oracle 進 程在重要方面有所不同。
服務于客戶進程的Oracle 進程可以讀寫 SGA ,而客戶進程不能??蛻暨M程可以在數(shù)據庫主機之外的主機上運行,而 Oracle 進程不能。
例如,假設客戶端主機上的用戶啟動了SQL*Plus ,然后在數(shù)據庫實例沒有啟動時通過網絡連接到另一臺主機上的數(shù)據庫 sample:
SQL> CONNECT SYS@ cjc AS SYSDBA
Enter password: *********
Connected to an idle instance.
在客戶端主機上,對sqlplus 或 sample 進程的搜索只顯示 sqlplus 客戶端進程 :
在數(shù)據庫主機上,對sqlplus 或 sample 進程的搜索顯示一個具有非本地連接的服務器進程,但是沒有客戶機進程 :
2 服務 進程
Oracle 服務進程 用于處理 連接到實例的客戶進程的請求。
專用服務器進程(dedicated server ),每個進程服務一個客戶進程。
共享服務器進程(shared server ),每個進程服務多個客戶進程。
在共享服務器連接中,客戶機應用程序通過網絡連接到dispatcher 進程,而不是服務器進程。例如, 20 個客戶端進程可以連接到單個 dispatcher 進程。
dispatcher 進程接收來自連接的客戶機的請求,并將它們放入大池中的請求隊列中。第一個可用的共享服務器進程從隊列獲取請求并處理它。然后,共享服務器將結果放入 dispatcher 響應隊列。 dispatcher 進程監(jiān)視此隊列并將結果傳輸?shù)娇蛻魴C。
3 后臺進程
后臺進程執(zhí)行操作數(shù)據庫所需的維護任務,并為多個用戶實現(xiàn)性能最大化。
每個后臺進程有一個單獨的任務,但是可以與其他進程一起工作。例如,LGWR 進程將 重做 數(shù)據從重做日志緩沖區(qū)寫入在線重做日志。當一個已填滿的重做日志文件準備歸檔時,LGWR 向另一個進程 歸檔進程 發(fā)出信號,讓它歸檔重做日志文件。
Oracle 數(shù)據庫在數(shù)據庫實例啟動時自動創(chuàng)建后臺進程。一個實例可以有許多后臺進程,但并不是所有后臺進程都始終存在于每個數(shù)據庫配置中。下面的查詢 會 列出數(shù)據庫上運行的后臺進程:
SELECT PNAME FROM V$PROCESS WHERE PNAME IS NOT NULL ORDER BY PNAME;
后臺進程包括三類:
3.1 強制后臺進程
3.2 可選的后臺進程
3.3 Slave 后臺進 程
強制后臺 進 程:
3.1.1 進程監(jiān)控進程(PMON) 組
3.1.2 進 程管理器(PMAN)
3.1.3 監(jiān)聽器注冊流程(LREG)
3.1.4 系統(tǒng)監(jiān)控流程(SMON)
3.1.5 數(shù)據庫寫入過程(DBW)
3.1.6 日志寫入過程(LGWR)
3.1.7 檢查點過程(CKPT)
3.1.8 可管理性監(jiān)控流程(MMON 和 MMNL)
3.1.9 回收器 進 程( RECO )
3.1.1 進程監(jiān) 控 進程(PMON) 組
PMON 組包括 PMON 、清理主進程 (CLMN) 和清理輔助進程 (CLnn) 。這些進程負責監(jiān)視和清理其他進程。
PMON 組監(jiān)視緩沖區(qū)緩存的清理和客戶機進程使用的資源的釋放。例如, PMON 組負責重置活動事務表的狀態(tài),釋放不再需要的鎖,并從活動進程列表中刪除終止進程的進程 ID 。
數(shù)據庫必須確保已終止進程持有的資源被釋放,以便其他進程可以使用它們。否則,進程可能會被阻塞或卡在爭用中。
進程監(jiān)視器進程(PMON)
進程監(jiān)視器(PMON) 檢測其他后臺進程的終止。如果服務器或調度程序進程非正常終止,則 PMON 組負責執(zhí)行進程恢復。進程終止可能有多個原因,包括操作系統(tǒng)終止命令或更改系統(tǒng)終止會話語句。
作用:
1 、在其他進程失敗后執(zhí)行清理工作:回滾事物、釋放鎖、釋放其他資源。
2 、 12C 版本之前, PMON 負責數(shù)據庫實例監(jiān)聽注冊的相關任務 。
3 、檢查會話的空閑連接時間。
觸發(fā)條件: 定時被喚醒,其他進程也會主動喚醒它。
清理主進程(CLMN)
PMON 將清理工作委托給清理主進程 (CLMN) 。檢測異常終止的任務仍然由 PMON 完成。
CLMN 定期執(zhí)行已終止進程、已終止的會話、事務、網絡連接、空閑會話、分離事務和已超出其空閑超時的分離網絡連接的清理。
清理輔助進程(CLnn)
CLMN 將清理工作委托給 CLnn 輔助進程。
CLnn 進程幫助清除終止的進程和會話。輔助進程的數(shù)量與要完成的清理工作量和當前清理效率成正比。
清理進程可能被阻塞,從而阻止它繼續(xù)清理其他進程。此外,如果多個進程需要清理,那么清理時間可能很長。由于這些原因,Oracle 數(shù)據庫可以并行地使用多個輔助進程來執(zhí)行清理,從而緩解了緩慢的性能。
V$CLEANUP_PROCESS 和 V$DEAD_CLEANUP 視圖包含關于 CLMN 清理的元數(shù)據。 V$CLEANUP_PROCESS 視圖包含每個清理進程的一行。例如,如果 V$CLEANUP_PROCESS 。狀態(tài)繁忙,則進程當前正在進行清理。
數(shù)據庫資源隔離
如果進程或會話終止,則PMON 組將所持有的資源釋放到數(shù)據庫。在某些情況下, PMON 組可以自動隔離損壞的、不可恢復的資源,這樣就不會立即強制終止數(shù)據庫實例。
PMON 組將繼續(xù)對持有隔離資源的進程或會話執(zhí)行盡可能多的清理工作。 V$QUARANTINE 視圖包含元數(shù)據,比如資源類型、消耗的內存數(shù)量、導致隔離的 Oracle 錯誤等等。
3.1.2 進程管理器(PMAN)
Process Manager (PMAN) 監(jiān)視多個后臺進程,包括共享服務器、池服務器和作業(yè)隊列進程。
PMAN 監(jiān)視、 啟動 和停止以下類型的進程:
1 調度程序和共享服務器進程
2 用于數(shù)據庫常駐連接池的連接代理和池服務器進程pooled server process
3 工作隊列的 進 程Job queue processes
4 可 重啟的 后臺進程
3.1.3 監(jiān)聽器注冊 進 程(LREG)
12C 開始引入 LREG 進程, 負責數(shù)據庫實例監(jiān)聽注冊的相關任務。 在12c 之前的版本,該部分工作由 PMON 進程負責。偵聽器注冊進程 (LREG) 向 Oracle Net 偵聽器注冊關于數(shù)據庫實例和調度程序進程的信息。當實例啟動時, LREG 輪詢偵聽器以確定它是否正在運行。如果監(jiān)聽器正在運行,那么 LREG 將傳遞相關參數(shù)。如果它沒有運行,那么 LREG 會定期嘗試與它聯(lián)系。
3.1.4 系統(tǒng)監(jiān)控 進 程(SMON)
系統(tǒng)監(jiān)控進程(SMON) 負責各種系統(tǒng)級的清理任務。
分配給SMON 的職責包括 :
1 執(zhí)行實例恢復,前滾(Roll Forward) 恢復到實例關閉的狀態(tài),使用最后一次檢查點后的日志進程重做。在 Oracle RAC 數(shù)據庫中,一個數(shù)據庫實例的 SMON 進程可以對失敗的實例執(zhí)行實例恢復。
2 恢復在實例恢復期間由于文 數(shù)據文件 或表空間離線錯誤而跳過的已終止事務。當表空間或文件恢復聯(lián)機時,SMON 將恢復事務。
3 清理未使用的臨時段 ,釋放空間 。例如,Oracle 數(shù)據庫在創(chuàng)建索引時分配區(qū)段。如果操作失敗,那么 SMON 將清理臨時空間。
4 合并空間, 在字典管理的表空間中合并連續(xù)的空閑區(qū)。
3.1.5 數(shù)據庫寫進程(DBW)
該進程負責將buffer cache 的臟數(shù)據寫入到磁盤。 DBW 進程根據 LRU 算法,將最近最少被使用的 buffer 寫入磁盤 。
盡管一個數(shù)據庫寫入進程(DBW0) 對于大多數(shù)系統(tǒng)來說已經足夠了,但是如果系統(tǒng)大量修改數(shù)據可以配置其他進程 dbw1 到 DBW9, DBWa 到 DBWz, BW36 到 bw99 來 提高寫入性能。這些附加的DBW 進程在單處理器系統(tǒng)上沒有用處。
DBW 進程在下列條件下將臟緩沖區(qū)寫入磁盤 :
1 當服務器進程在掃描緩沖區(qū)的閾值數(shù)目后找不到干凈的可重用緩沖區(qū)時,它向DBW 發(fā)出寫的信號。 DBW 在執(zhí)行其他處理時,盡可能異步地將臟緩沖區(qū)寫入磁盤。
2 數(shù)據庫執(zhí)行檢查點操作時。 DBW 定期寫緩沖區(qū)來推進檢查點,檢查點是重做線程中實例恢復開始的位置。檢查點的日志位置由緩沖區(qū)緩存中最老的臟緩沖區(qū)決定。
3 修改表空間或數(shù)據文件離線時。
4 每三秒喚醒一次查看臟塊數(shù)量,決定是否執(zhí)行寫入操作。
在許多情況下,DBW 寫的塊分散在整個磁盤中。因此,寫操作往往比 LGWR 執(zhí)行的順序寫操作慢。 DBW 在可能的情況下執(zhí)行多塊寫操作以提高效率。在多塊寫入中寫入的塊的數(shù)量因操作系統(tǒng)而異。
3.1.6 日志寫 進程 (LGWR)
負責將redo log buffer 的數(shù)據寫入到在線重做日志,其會記錄所有的 DML 和 DDL 操作,用于實例 、介質 恢復。
觸發(fā)條件:
1 用戶提交事務。
2 發(fā)生在線重做日志切換。
3 LGWR 上次寫已經過去三秒鐘了。
4 重做日志緩沖區(qū)已滿三分之一,或包含1 MB 的緩沖數(shù)據。
5 DBWR 進程觸發(fā) :DBWn 視圖將臟數(shù)據塊寫入磁盤先檢測他的相關 redo 記錄是否寫入聯(lián)機日志文件,如果沒有就通知 LGWR 進程。在 oracle 中成為提前寫機制 (write ahead):redo 記錄先于數(shù)據記錄被寫入磁盤 。
3.1.7 檢查點 進 程(CKPT)
負責更新控制文件和數(shù)據文件頭的檢查點信息,其中包括檢查點位置,SCN 號, online redo log 開始恢復的位置。檢查點在以下情況可能發(fā)起:
(1) 在日志切換 alter system switch logfile 的時候。
(2) 直接使用 alter system checkpoint 命令實現(xiàn)。
(3) 數(shù)據庫用 immediate 、 Transaction 、 Normal 或選項 Shutdown 數(shù)據庫的時候。
(4) 開始、結束備份表空間等 (ALTER TABLESPACE BEGIN BACKUP) 。
(5) 將表空間或者數(shù)據文件切換為只讀或者離線。
(6)DBW 進程寫的時候,但是此時只將檢查點信息寫入控制文件,而不會寫到數(shù)據文件頭。
(7) 達到 LOG_CHECKPOINT_TIMEOUT 的延遲時。
(8) 根據參數(shù) FAST_START_MTTR_TARGT 的設置來確定。
如果當內存中產生的Dirty Buffer 所需的恢復時間 (estimated_mttr) 到達 FAST_START_MTTR_TARGET 指定時間,那么檢查點進程被觸發(fā)。
通知DBWR 進程將按檢查點隊列順序將臟數(shù)據寫入到數(shù)據文件,從而縮短了最后檢查點位置與 Redo 日志間的距離,減少實例恢復所需的時間。
3.1.8 可管理性監(jiān)控 進 程(M M ON 和 MMNL )
可管理性監(jiān)視進程(m m on )執(zhí)行許多與自動工作負載存儲庫( AWR )相關的任務。
例如,當某個度量值違反其閾值時, m mon 會進行寫入,為最近修改的 SQL 對象獲取快照和統(tǒng)計值。
可管理性監(jiān)視器精簡進程(MMNL )將統(tǒng)計信息從 SGA 中的活動會話歷史( ASH )緩沖區(qū)寫入磁盤。 MMNL 在 ASH 緩沖區(qū)已滿時寫入磁盤。
3.1.9 回收器 進 程(RECO)
RECO 是分布式事務中處理 進程 故障的 進程 .
節(jié)點的RECO 進程自動連接到其他涉及到可疑分布式事務的數(shù)據庫。當 RECO 重新建立數(shù)據庫之間的連接時,它將自動解析所有可疑事務,從每個數(shù)據庫的掛起事務表中刪除與已解析事務對應的任何行。
可選的后臺進程
可選的后臺進程是指任何沒有被定義為強制的后臺進程。
大多數(shù)可選的后臺進程都是特定于任務或特性的。例如,支持Oracle ASM 的后臺進程只有在啟用該特性時才可用。
本節(jié)介紹一些常見的可選流程:
3.2.1 歸檔 進程(ARCn)
3.2.2 作業(yè)隊列處理 進程 (CJQ0 和 Jnnn)
3.2.3 閃回歸檔 (FBDA)
3.2.4 空間管理協(xié)調程序(SMCO)
3.2.1 歸檔進 程(ARCn)
在發(fā)生重做日志切換后,歸檔進程(ARCn) 將聯(lián)機重做日志文件復制到 歸檔日志中 。
在DG 中, 這些進程還可以收集事務重做數(shù)據并將其傳輸?shù)絺溆脭?shù)據庫目的地。ARCn 進程僅在數(shù)據庫處于 ARCHIVELOG 模式并啟用自動歸檔時才存在。
3.2.2 作業(yè)隊列進程(CJQ0 和 Jnnn)
隊列進程運行用戶作業(yè),通常是批處理模式。作業(yè)是計劃運行一次或多次的用戶定義任務。
例如,可以使用作業(yè)隊列在后臺調度長時間運行更新。給定一個開始日期和時間間隔,作業(yè)隊列進程嘗試在下一次出現(xiàn)該間隔時運行作業(yè)。
Oracle 數(shù)據庫動態(tài)管理作業(yè)隊列進程,從而允許作業(yè)隊列客戶機在需要時使用更多的作業(yè)隊列進程。當新進程空閑時,數(shù)據庫釋放它們所使用的資源。
動態(tài)作業(yè)隊列進程可以在給定的時間間隔內并發(fā)地運行許多作業(yè)。事件的順序如下:
3.2.3 閃回歸檔進 程(FBDA)
閃回數(shù)據歸檔是Oracle Database 11g 強大的新特性之一。它可以用安全有效的方式透明地跟蹤在數(shù)據庫中存儲的所有數(shù)據,并且沒有保留期限的限制。這個特性很容易配置,而且擁有高效的存儲以及性能。閃回數(shù)據歸檔不依賴于 UNDO ,通過 “AS OF” 閃回 SQL 語句來查看之前在某個時間點的數(shù)據,防止意外的數(shù)據更新和刪除 ( 例如用戶的錯誤操作 ) 或惡意的數(shù)據破壞 。
閃回數(shù)據歸檔進程,歸檔被追蹤的表的歷史行到閃回數(shù)據歸檔文件里面。當在被追蹤的表上面發(fā)生了dml 事務的時候,這個進程存儲行的前鏡像到閃回數(shù)據歸檔里面。它同樣保存當前行的元數(shù)據。
3.2.4 空間管理協(xié)調程序(SMCO)
11g 引入 extent pre-allocation 特性,由 SMCO(space management coordinator) 負責,其動態(tài) spawn 子進程 Wnnn 用于空間分配和回收
SMCO 進程協(xié)調各種空間管理相關任務的執(zhí)行。
1Extent 預分配
數(shù)據文件須開啟autoextend , SMCO 依據歷史信息,在表空間里所有尚未達到 maxsize 的數(shù)據文件間均勻的分配擴展;
2 回收臨時段
3Securefile lob 預擴展 / 回收
此特性有時會產生意料之外的結果,譬如數(shù)據文件擴展到maxsize( 但實際數(shù)據沒有這么大 )
AUTOEXTEND Grows To Full Size Without Reason [ID 1459097.1]
Why The Data Files Got Extended Up Over The Weekend [ID 1538442.1]
Slave 進 程
Slave 進程是代表其他進程執(zhí)行工作的后臺進程。
本節(jié)描述Oracle 數(shù)據庫使用的一些從進程。
I / O slave 的過程
I/O slave 進程(Innn) 模擬不支持異步 I/O 的系統(tǒng)和設備。
在異步I/O 中,對傳輸沒有時間要求,這使得其他進程可以在傳輸完成之前啟動。
例如,假設一個應用程序向一個不支持異步I/O 的操作系統(tǒng)的磁盤寫入了 1000 個塊。每次寫操作都是按順序發(fā)生的,并等待寫操作成功的確認。使用異步磁盤,應用程序可以批量寫入塊并執(zhí)行其他工作,同時等待已寫入所有塊的操作系統(tǒng)的響應。
為了模擬異步I/O ,一個進程監(jiān)視多個從屬進程。 調用程序進程將工作分配給每個從屬進程,它們等待每次寫入完成并在完成后向調用程序報告。
在真正的異步I/O 中,操作系統(tǒng)等待 I/O 完成并向 進 程報告,而在模擬異步I/O 中,從操作系統(tǒng)等待并向調用者報告。
數(shù)據庫支持不同類型的I/O slave ,包括 :
? 恢復管理器 (RMAN) 的 I/O slave
在使用RMAN 備份或恢復數(shù)據時,可以對磁盤和磁帶設備使用 I/O 從設備。
?Database writer slaves
當計算機有一個CPU 時, 無法 使用多個數(shù)據庫寫進程 , 那么數(shù)據庫可以將I/O 分布在多個從進程上。 DBW 是惟一一個掃描緩沖區(qū)緩存 LRU 列表以查找要寫到磁盤上的塊的進程。但是,從 I/O 執(zhí)行這些塊的 I/O 。
并行執(zhí)行(PX) 服務器進程
在并行執(zhí)行中,多個進程同時運行一條SQL 語句。
通過將工作分配給多個進程,Oracle 數(shù)據庫可以更快地運行語句。例如,四個流程 處理 一年 中 四個不同的季度,而不是一個流程獨自處理所有四個季度。
并行執(zhí)行與串行執(zhí)行形成對比,在串行執(zhí)行中,單個服務器進程執(zhí)行SQL 語句的順序執(zhí)行所需的所有處理。例如,為了執(zhí)行完整的表掃描,例如 SELECT * FROM employees ,一個服務器進程執(zhí)行所有的工作 。
歡迎關注我的微信公眾號"IT 小 Chen" ,共同學習,共同成長!??!
網站欄目:Oracle面試寶典-進程結構篇
文章鏈接:http://redsoil1982.com.cn/article10/gdicgo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網站制作、外貿網站建設、網站維護、微信公眾號、營銷型網站建設、網站排名
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)