溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle面試寶典-進(jìn)程結(jié)構(gòu)篇

發(fā)布時(shí)間:2020-08-09 17:21:25 來源:ITPUB博客 閱讀:212 作者:chenoracle 欄目:關(guān)系型數(shù)據(jù)庫

Oracle 面試寶典 - 進(jìn)程結(jié)構(gòu)篇

Oracle 數(shù)據(jù)庫是以單進(jìn)程還是多進(jìn)程方式運(yùn)行的?

Windows 平臺(tái)下, Oracle 數(shù)據(jù)庫是以單進(jìn)程 (oracle.exe) 多線程方式運(yùn)行。

Linux/Unix 平臺(tái)下, Oracle 數(shù)據(jù)庫通常是以多進(jìn)程方式運(yùn)行。

到了12c 這個(gè)版本, Oracle Unix/Linux 平臺(tái)上做出了一些改變,引入了多線程的模式。

這個(gè)特性由threaded_execution 參數(shù)來控制,通過這個(gè)參數(shù),可以控制數(shù)據(jù)庫以多進(jìn)程方式運(yùn)行或者以多線程方式運(yùn)行,該參數(shù)默認(rèn)是 false 。數(shù)據(jù)庫以多進(jìn)程方式運(yùn)行。

怎么理解進(jìn)程和線程?

進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。如果把進(jìn)程理解為在邏輯上操作系統(tǒng)所完成的任務(wù),那么線程表示完成該任務(wù)的許多可能的子任務(wù)之一。一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。線程是操作系統(tǒng)可識(shí)別的最小執(zhí)行和調(diào)度單位。

看到知乎上,一位名為南理漢子的作者回答特別新穎:

開個(gè)QQ ,開了一個(gè)進(jìn)程;開了迅雷,開了一個(gè)進(jìn)程。在 QQ 的這個(gè)進(jìn)程里,傳輸文字開一個(gè)線程、傳輸語音開了一個(gè)線程、彈出對(duì)話框又開了一個(gè)線程。所以運(yùn)行某個(gè)軟件,相當(dāng)于開了一個(gè)進(jìn)程。在這個(gè)軟件運(yùn)行的過程里(在這個(gè)進(jìn)程里),多個(gè)工作支撐的完成 QQ 的運(yùn)行,那么這“多個(gè)工作”分別有一個(gè)線程。所以一個(gè)進(jìn)程管著多個(gè)線程。通俗的講:“進(jìn)程是爹媽,管著眾多的線程兒子” ...

Oracle 數(shù)據(jù)庫中有哪幾類進(jìn)程?

1 客戶 進(jìn)程

2 服務(wù) 進(jìn)程

3 后臺(tái)進(jìn)

請(qǐng)分別介紹下 客戶 進(jìn)程、 服務(wù)器 進(jìn)程、后臺(tái)進(jìn) ?

1 客戶 進(jìn)程

當(dāng)用戶運(yùn)行一個(gè)應(yīng)用程序( Pro*C 程序或 SQL*Plus) 時(shí),操作系統(tǒng)創(chuàng)建一個(gè)客戶端進(jìn)程 ( 有時(shí)稱為用戶進(jìn)程 ) 來運(yùn)行用戶應(yīng)用程序??蛻舳藨?yīng)用程序?qū)?/span> Oracle 數(shù)據(jù)庫 相連 ,以提供與數(shù)據(jù)庫通信所需的api 。

客戶 進(jìn) 程與直接與實(shí)例交互的Oracle 進(jìn) 程在重要方面有所不同。

服務(wù)于客戶進(jìn)程的Oracle 進(jìn)程可以讀寫 SGA ,而客戶進(jìn)程不能。客戶進(jìn)程可以在數(shù)據(jù)庫主機(jī)之外的主機(jī)上運(yùn)行,而 Oracle 進(jìn)程不能。

例如,假設(shè)客戶端主機(jī)上的用戶啟動(dòng)了SQL*Plus ,然后在數(shù)據(jù)庫實(shí)例沒有啟動(dòng)時(shí)通過網(wǎng)絡(luò)連接到另一臺(tái)主機(jī)上的數(shù)據(jù)庫 sample:

SQL> CONNECT SYS@ cjc  AS SYSDBA

Enter password: *********

Connected to an idle instance.

在客戶端主機(jī)上,對(duì)sqlplus sample 進(jìn)程的搜索只顯示 sqlplus 客戶端進(jìn)程 :

Oracle面試寶典-進(jìn)程結(jié)構(gòu)篇

在數(shù)據(jù)庫主機(jī)上,對(duì)sqlplus sample 進(jìn)程的搜索顯示一個(gè)具有非本地連接的服務(wù)器進(jìn)程,但是沒有客戶機(jī)進(jìn)程 :

Oracle面試寶典-進(jìn)程結(jié)構(gòu)篇

2 服務(wù) 進(jìn)程

Oracle 服務(wù)進(jìn)程 用于處理 連接到實(shí)例的客戶進(jìn)程的請(qǐng)求。

專用服務(wù)器進(jìn)程(dedicated server ),每個(gè)進(jìn)程服務(wù)一個(gè)客戶進(jìn)程。

共享服務(wù)器進(jìn)程(shared server ),每個(gè)進(jìn)程服務(wù)多個(gè)客戶進(jìn)程。

在共享服務(wù)器連接中,客戶機(jī)應(yīng)用程序通過網(wǎng)絡(luò)連接到dispatcher 進(jìn)程,而不是服務(wù)器進(jìn)程。例如, 20 個(gè)客戶端進(jìn)程可以連接到單個(gè) dispatcher 進(jìn)程。

dispatcher 進(jìn)程接收來自連接的客戶機(jī)的請(qǐng)求,并將它們放入大池中的請(qǐng)求隊(duì)列中。第一個(gè)可用的共享服務(wù)器進(jìn)程從隊(duì)列獲取請(qǐng)求并處理它。然后,共享服務(wù)器將結(jié)果放入 dispatcher 響應(yīng)隊(duì)列。 dispatcher 進(jìn)程監(jiān)視此隊(duì)列并將結(jié)果傳輸?shù)娇蛻魴C(jī)。

3 后臺(tái)進(jìn)程

后臺(tái)進(jìn)程執(zhí)行操作數(shù)據(jù)庫所需的維護(hù)任務(wù),并為多個(gè)用戶實(shí)現(xiàn)性能最大化。

每個(gè)后臺(tái)進(jìn)程有一個(gè)單獨(dú)的任務(wù),但是可以與其他進(jìn)程一起工作。例如,LGWR 進(jìn)程將 重做 數(shù)據(jù)從重做日志緩沖區(qū)寫入在線重做日志。當(dāng)一個(gè)已填滿的重做日志文件準(zhǔn)備歸檔時(shí),LGWR 向另一個(gè)進(jìn)程 歸檔進(jìn)程 發(fā)出信號(hào),讓它歸檔重做日志文件。

Oracle 數(shù)據(jù)庫在數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí)自動(dòng)創(chuàng)建后臺(tái)進(jìn)程。一個(gè)實(shí)例可以有許多后臺(tái)進(jìn)程,但并不是所有后臺(tái)進(jìn)程都始終存在于每個(gè)數(shù)據(jù)庫配置中。下面的查詢 會(huì) 列出數(shù)據(jù)庫上運(yùn)行的后臺(tái)進(jìn)程:

SELECT PNAME FROM V$PROCESS WHERE PNAME IS NOT NULL ORDER BY PNAME;

后臺(tái)進(jìn)程包括三類:

3.1 強(qiáng)制后臺(tái)進(jìn)程

3.2 可選的后臺(tái)進(jìn)程

3.3 Slave 后臺(tái)進(jìn)

強(qiáng)制后臺(tái) 進(jìn) :

3.1.1 進(jìn)程監(jiān)控進(jìn)程(PMON)

3.1.2 進(jìn) 程管理器(PMAN)

3.1.3 監(jiān)聽器注冊(cè)流程(LREG)

3.1.4 系統(tǒng)監(jiān)控流程(SMON)

3.1.5 數(shù)據(jù)庫寫入過程(DBW)

3.1.6 日志寫入過程(LGWR)

3.1.7 檢查點(diǎn)過程(CKPT)

3.1.8 可管理性監(jiān)控流程(MMON MMNL)

3.1.9 回收器 進(jìn) ( RECO )

3.1.1 進(jìn)程監(jiān) 進(jìn)程(PMON)

PMON 組包括 PMON 、清理主進(jìn)程 (CLMN) 和清理輔助進(jìn)程 (CLnn) 。這些進(jìn)程負(fù)責(zé)監(jiān)視和清理其他進(jìn)程。

PMON 組監(jiān)視緩沖區(qū)緩存的清理和客戶機(jī)進(jìn)程使用的資源的釋放。例如, PMON 組負(fù)責(zé)重置活動(dòng)事務(wù)表的狀態(tài),釋放不再需要的鎖,并從活動(dòng)進(jìn)程列表中刪除終止進(jìn)程的進(jìn)程 ID 。

數(shù)據(jù)庫必須確保已終止進(jìn)程持有的資源被釋放,以便其他進(jìn)程可以使用它們。否則,進(jìn)程可能會(huì)被阻塞或卡在爭(zhēng)用中。

進(jìn)程監(jiān)視器進(jìn)程(PMON)

進(jìn)程監(jiān)視器(PMON) 檢測(cè)其他后臺(tái)進(jìn)程的終止。如果服務(wù)器或調(diào)度程序進(jìn)程非正常終止,則 PMON 組負(fù)責(zé)執(zhí)行進(jìn)程恢復(fù)。進(jìn)程終止可能有多個(gè)原因,包括操作系統(tǒng)終止命令或更改系統(tǒng)終止會(huì)話語句。

作用:

1 、在其他進(jìn)程失敗后執(zhí)行清理工作:回滾事物、釋放鎖、釋放其他資源。

2 、 12C 版本之前, PMON 負(fù)責(zé)數(shù)據(jù)庫實(shí)例監(jiān)聽注冊(cè)的相關(guān)任務(wù) 。

3 、檢查會(huì)話的空閑連接時(shí)間。

觸發(fā)條件: 定時(shí)被喚醒,其他進(jìn)程也會(huì)主動(dòng)喚醒它。

清理主進(jìn)程(CLMN)

PMON 將清理工作委托給清理主進(jìn)程 (CLMN) 。檢測(cè)異常終止的任務(wù)仍然由 PMON 完成。

CLMN 定期執(zhí)行已終止進(jìn)程、已終止的會(huì)話、事務(wù)、網(wǎng)絡(luò)連接、空閑會(huì)話、分離事務(wù)和已超出其空閑超時(shí)的分離網(wǎng)絡(luò)連接的清理。

清理輔助進(jìn)程(CLnn)

CLMN 將清理工作委托給 CLnn 輔助進(jìn)程。

CLnn 進(jìn)程幫助清除終止的進(jìn)程和會(huì)話。輔助進(jìn)程的數(shù)量與要完成的清理工作量和當(dāng)前清理效率成正比。

清理進(jìn)程可能被阻塞,從而阻止它繼續(xù)清理其他進(jìn)程。此外,如果多個(gè)進(jìn)程需要清理,那么清理時(shí)間可能很長(zhǎng)。由于這些原因,Oracle 數(shù)據(jù)庫可以并行地使用多個(gè)輔助進(jìn)程來執(zhí)行清理,從而緩解了緩慢的性能。

V$CLEANUP_PROCESS V$DEAD_CLEANUP 視圖包含關(guān)于 CLMN 清理的元數(shù)據(jù)。 V$CLEANUP_PROCESS 視圖包含每個(gè)清理進(jìn)程的一行。例如,如果 V$CLEANUP_PROCESS 。狀態(tài)繁忙,則進(jìn)程當(dāng)前正在進(jìn)行清理。

數(shù)據(jù)庫資源隔離

如果進(jìn)程或會(huì)話終止,則PMON 組將所持有的資源釋放到數(shù)據(jù)庫。在某些情況下, PMON 組可以自動(dòng)隔離損壞的、不可恢復(fù)的資源,這樣就不會(huì)立即強(qiáng)制終止數(shù)據(jù)庫實(shí)例。

PMON 組將繼續(xù)對(duì)持有隔離資源的進(jìn)程或會(huì)話執(zhí)行盡可能多的清理工作。 V$QUARANTINE 視圖包含元數(shù)據(jù),比如資源類型、消耗的內(nèi)存數(shù)量、導(dǎo)致隔離的 Oracle 錯(cuò)誤等等。

3.1.2 進(jìn)程管理器(PMAN)

Process Manager (PMAN) 監(jiān)視多個(gè)后臺(tái)進(jìn)程,包括共享服務(wù)器、池服務(wù)器和作業(yè)隊(duì)列進(jìn)程。

PMAN 監(jiān)視、 啟動(dòng) 和停止以下類型的進(jìn)程:

1 調(diào)度程序和共享服務(wù)器進(jìn)程

2 用于數(shù)據(jù)庫常駐連接池的連接代理和池服務(wù)器進(jìn)程pooled server process

3 工作隊(duì)列的 進(jìn) Job queue processes

4 重啟的 后臺(tái)進(jìn)程

3.1.3 監(jiān)聽器注冊(cè) 進(jìn) (LREG)

12C 開始引入 LREG 進(jìn)程, 負(fù)責(zé)數(shù)據(jù)庫實(shí)例監(jiān)聽注冊(cè)的相關(guān)任務(wù)。 12c 之前的版本,該部分工作由 PMON 進(jìn)程負(fù)責(zé)。偵聽器注冊(cè)進(jìn)程 (LREG) Oracle Net 偵聽器注冊(cè)關(guān)于數(shù)據(jù)庫實(shí)例和調(diào)度程序進(jìn)程的信息。當(dāng)實(shí)例啟動(dòng)時(shí), LREG 輪詢偵聽器以確定它是否正在運(yùn)行。如果監(jiān)聽器正在運(yùn)行,那么 LREG 將傳遞相關(guān)參數(shù)。如果它沒有運(yùn)行,那么 LREG 會(huì)定期嘗試與它聯(lián)系。

3.1.4 系統(tǒng)監(jiān)控 進(jìn) (SMON)

系統(tǒng)監(jiān)控進(jìn)程(SMON) 負(fù)責(zé)各種系統(tǒng)級(jí)的清理任務(wù)。

分配給SMON 的職責(zé)包括 :

1 執(zhí)行實(shí)例恢復(fù),前滾(Roll Forward) 恢復(fù)到實(shí)例關(guān)閉的狀態(tài),使用最后一次檢查點(diǎn)后的日志進(jìn)程重做。在 Oracle RAC 數(shù)據(jù)庫中,一個(gè)數(shù)據(jù)庫實(shí)例的 SMON 進(jìn)程可以對(duì)失敗的實(shí)例執(zhí)行實(shí)例恢復(fù)。

2 恢復(fù)在實(shí)例恢復(fù)期間由于文 數(shù)據(jù)文件 或表空間離線錯(cuò)誤而跳過的已終止事務(wù)。當(dāng)表空間或文件恢復(fù)聯(lián)機(jī)時(shí),SMON 將恢復(fù)事務(wù)。

3 清理未使用的臨時(shí)段 ,釋放空間 。例如,Oracle 數(shù)據(jù)庫在創(chuàng)建索引時(shí)分配區(qū)段。如果操作失敗,那么 SMON 將清理臨時(shí)空間。

4 合并空間, 在字典管理的表空間中合并連續(xù)的空閑區(qū)。

3.1.5 數(shù)據(jù)庫寫進(jìn)程(DBW)

該進(jìn)程負(fù)責(zé)將buffer cache 的臟數(shù)據(jù)寫入到磁盤。 DBW 進(jìn)程根據(jù) LRU 算法,將最近最少被使用的 buffer 寫入磁盤 。

盡管一個(gè)數(shù)據(jù)庫寫入進(jìn)程(DBW0) 對(duì)于大多數(shù)系統(tǒng)來說已經(jīng)足夠了,但是如果系統(tǒng)大量修改數(shù)據(jù)可以配置其他進(jìn)程 dbw1 DBW9, DBWa DBWz, BW36 bw99 提高寫入性能。這些附加的DBW 進(jìn)程在單處理器系統(tǒng)上沒有用處。

DBW 進(jìn)程在下列條件下將臟緩沖區(qū)寫入磁盤 :

1 當(dāng)服務(wù)器進(jìn)程在掃描緩沖區(qū)的閾值數(shù)目后找不到干凈的可重用緩沖區(qū)時(shí),它向DBW 發(fā)出寫的信號(hào)。 DBW 在執(zhí)行其他處理時(shí),盡可能異步地將臟緩沖區(qū)寫入磁盤。

2 數(shù)據(jù)庫執(zhí)行檢查點(diǎn)操作時(shí)。 DBW 定期寫緩沖區(qū)來推進(jìn)檢查點(diǎn),檢查點(diǎn)是重做線程中實(shí)例恢復(fù)開始的位置。檢查點(diǎn)的日志位置由緩沖區(qū)緩存中最老的臟緩沖區(qū)決定。

3 修改表空間或數(shù)據(jù)文件離線時(shí)。

4 每三秒喚醒一次查看臟塊數(shù)量,決定是否執(zhí)行寫入操作。

在許多情況下,DBW 寫的塊分散在整個(gè)磁盤中。因此,寫操作往往比 LGWR 執(zhí)行的順序?qū)懖僮髀?/span> DBW 在可能的情況下執(zhí)行多塊寫操作以提高效率。在多塊寫入中寫入的塊的數(shù)量因操作系統(tǒng)而異。

3.1.6 日志寫 進(jìn)程 (LGWR)

負(fù)責(zé)將redo log buffer 的數(shù)據(jù)寫入到在線重做日志,其會(huì)記錄所有的 DML DDL 操作,用于實(shí)例 、介質(zhì) 恢復(fù)。

觸發(fā)條件:

1 用戶提交事務(wù)。

2 發(fā)生在線重做日志切換。

3 LGWR 上次寫已經(jīng)過去三秒鐘了。

4 重做日志緩沖區(qū)已滿三分之一,或包含1 MB 的緩沖數(shù)據(jù)。

5 DBWR 進(jìn)程觸發(fā) :DBWn 視圖將臟數(shù)據(jù)塊寫入磁盤先檢測(cè)他的相關(guān) redo 記錄是否寫入聯(lián)機(jī)日志文件,如果沒有就通知 LGWR 進(jìn)程。在 oracle 中成為提前寫機(jī)制 (write ahead):redo 記錄先于數(shù)據(jù)記錄被寫入磁盤 。

3.1.7 檢查點(diǎn) 進(jìn) (CKPT)

負(fù)責(zé)更新控制文件和數(shù)據(jù)文件頭的檢查點(diǎn)信息,其中包括檢查點(diǎn)位置,SCN 號(hào), online redo log 開始恢復(fù)的位置。檢查點(diǎn)在以下情況可能發(fā)起:

(1) 在日志切換 alter system switch logfile 的時(shí)候。

(2) 直接使用 alter system checkpoint 命令實(shí)現(xiàn)。

(3) 數(shù)據(jù)庫用 immediate 、 Transaction 、 Normal 或選項(xiàng) Shutdown 數(shù)據(jù)庫的時(shí)候。

(4) 開始、結(jié)束備份表空間等 (ALTER TABLESPACE BEGIN BACKUP) 。

(5) 將表空間或者數(shù)據(jù)文件切換為只讀或者離線。

(6)DBW 進(jìn)程寫的時(shí)候,但是此時(shí)只將檢查點(diǎn)信息寫入控制文件,而不會(huì)寫到數(shù)據(jù)文件頭。

(7) 達(dá)到 LOG_CHECKPOINT_TIMEOUT 的延遲時(shí)。

(8) 根據(jù)參數(shù) FAST_START_MTTR_TARGT 的設(shè)置來確定。

如果當(dāng)內(nèi)存中產(chǎn)生的Dirty Buffer 所需的恢復(fù)時(shí)間 (estimated_mttr) 到達(dá) FAST_START_MTTR_TARGET 指定時(shí)間,那么檢查點(diǎn)進(jìn)程被觸發(fā)。

通知DBWR 進(jìn)程將按檢查點(diǎn)隊(duì)列順序?qū)⑴K數(shù)據(jù)寫入到數(shù)據(jù)文件,從而縮短了最后檢查點(diǎn)位置與 Redo 日志間的距離,減少實(shí)例恢復(fù)所需的時(shí)間。

3.1.8 可管理性監(jiān)控 進(jìn) 程(M M ON MMNL

可管理性監(jiān)視進(jìn)程(m m on )執(zhí)行許多與自動(dòng)工作負(fù)載存儲(chǔ)庫( AWR )相關(guān)的任務(wù)。

例如,當(dāng)某個(gè)度量值違反其閾值時(shí), m mon 會(huì)進(jìn)行寫入,為最近修改的 SQL 對(duì)象獲取快照和統(tǒng)計(jì)值。

可管理性監(jiān)視器精簡(jiǎn)進(jìn)程(MMNL )將統(tǒng)計(jì)信息從 SGA 中的活動(dòng)會(huì)話歷史( ASH )緩沖區(qū)寫入磁盤。 MMNL ASH 緩沖區(qū)已滿時(shí)寫入磁盤。

3.1.9 回收器 進(jìn) (RECO)

RECO 是分布式事務(wù)中處理 進(jìn)程 故障的 進(jìn)程 .

節(jié)點(diǎn)的RECO 進(jìn)程自動(dòng)連接到其他涉及到可疑分布式事務(wù)的數(shù)據(jù)庫。當(dāng) RECO 重新建立數(shù)據(jù)庫之間的連接時(shí),它將自動(dòng)解析所有可疑事務(wù),從每個(gè)數(shù)據(jù)庫的掛起事務(wù)表中刪除與已解析事務(wù)對(duì)應(yīng)的任何行。

可選的后臺(tái)進(jìn)程

可選的后臺(tái)進(jìn)程是指任何沒有被定義為強(qiáng)制的后臺(tái)進(jìn)程。

大多數(shù)可選的后臺(tái)進(jìn)程都是特定于任務(wù)或特性的。例如,支持Oracle ASM 的后臺(tái)進(jìn)程只有在啟用該特性時(shí)才可用。

本節(jié)介紹一些常見的可選流程:

3.2.1 歸檔 進(jìn)程(ARCn)

3.2.2 作業(yè)隊(duì)列處理 進(jìn)程 (CJQ0 Jnnn)

3.2.3 閃回歸檔  (FBDA)

3.2.4 空間管理協(xié)調(diào)程序(SMCO)

3.2.1 歸檔進(jìn) (ARCn)

在發(fā)生重做日志切換后,歸檔進(jìn)程(ARCn) 將聯(lián)機(jī)重做日志文件復(fù)制到 歸檔日志中

DG 中, 這些進(jìn)程還可以收集事務(wù)重做數(shù)據(jù)并將其傳輸?shù)絺溆脭?shù)據(jù)庫目的地。ARCn 進(jìn)程僅在數(shù)據(jù)庫處于 ARCHIVELOG 模式并啟用自動(dòng)歸檔時(shí)才存在。

3.2.2 作業(yè)隊(duì)列進(jìn)程(CJQ0 Jnnn)

隊(duì)列進(jìn)程運(yùn)行用戶作業(yè),通常是批處理模式。作業(yè)是計(jì)劃運(yùn)行一次或多次的用戶定義任務(wù)。

例如,可以使用作業(yè)隊(duì)列在后臺(tái)調(diào)度長(zhǎng)時(shí)間運(yùn)行更新。給定一個(gè)開始日期和時(shí)間間隔,作業(yè)隊(duì)列進(jìn)程嘗試在下一次出現(xiàn)該間隔時(shí)運(yùn)行作業(yè)。

Oracle 數(shù)據(jù)庫動(dòng)態(tài)管理作業(yè)隊(duì)列進(jìn)程,從而允許作業(yè)隊(duì)列客戶機(jī)在需要時(shí)使用更多的作業(yè)隊(duì)列進(jìn)程。當(dāng)新進(jìn)程空閑時(shí),數(shù)據(jù)庫釋放它們所使用的資源。

動(dòng)態(tài)作業(yè)隊(duì)列進(jìn)程可以在給定的時(shí)間間隔內(nèi)并發(fā)地運(yùn)行許多作業(yè)。事件的順序如下:

3.2.3 閃回歸檔進(jìn) (FBDA)

閃回?cái)?shù)據(jù)歸檔是Oracle Database 11g 強(qiáng)大的新特性之一。它可以用安全有效的方式透明地跟蹤在數(shù)據(jù)庫中存儲(chǔ)的所有數(shù)據(jù),并且沒有保留期限的限制。這個(gè)特性很容易配置,而且擁有高效的存儲(chǔ)以及性能。閃回?cái)?shù)據(jù)歸檔不依賴于 UNDO ,通過 “AS OF” 閃回 SQL 語句來查看之前在某個(gè)時(shí)間點(diǎn)的數(shù)據(jù),防止意外的數(shù)據(jù)更新和刪除 ( 例如用戶的錯(cuò)誤操作 ) 或惡意的數(shù)據(jù)破壞 。

閃回?cái)?shù)據(jù)歸檔進(jìn)程,歸檔被追蹤的表的歷史行到閃回?cái)?shù)據(jù)歸檔文件里面。當(dāng)在被追蹤的表上面發(fā)生了dml 事務(wù)的時(shí)候,這個(gè)進(jìn)程存儲(chǔ)行的前鏡像到閃回?cái)?shù)據(jù)歸檔里面。它同樣保存當(dāng)前行的元數(shù)據(jù)。

3.2.4 空間管理協(xié)調(diào)程序(SMCO)

11g 引入 extent pre-allocation 特性,由 SMCO(space management coordinator) 負(fù)責(zé),其動(dòng)態(tài) spawn 子進(jìn)程 Wnnn 用于空間分配和回收

SMCO 進(jìn)程協(xié)調(diào)各種空間管理相關(guān)任務(wù)的執(zhí)行。

1Extent 預(yù)分配

數(shù)據(jù)文件須開啟autoextend SMCO 依據(jù)歷史信息,在表空間里所有尚未達(dá)到 maxsize 的數(shù)據(jù)文件間均勻的分配擴(kuò)展;

2 回收臨時(shí)段

3Securefile lob 預(yù)擴(kuò)展 / 回收

此特性有時(shí)會(huì)產(chǎn)生意料之外的結(jié)果,譬如數(shù)據(jù)文件擴(kuò)展到maxsize( 但實(shí)際數(shù)據(jù)沒有這么大 )

AUTOEXTEND Grows To Full Size Without Reason [ID 1459097.1]

Why The Data Files Got Extended Up Over The Weekend [ID 1538442.1]

Slave 進(jìn)

Slave 進(jìn)程是代表其他進(jìn)程執(zhí)行工作的后臺(tái)進(jìn)程。

本節(jié)描述Oracle 數(shù)據(jù)庫使用的一些從進(jìn)程。

I / O  slave 的過程

I/O  slave 進(jìn)程(Innn) 模擬不支持異步 I/O 的系統(tǒng)和設(shè)備。

在異步I/O 中,對(duì)傳輸沒有時(shí)間要求,這使得其他進(jìn)程可以在傳輸完成之前啟動(dòng)。

例如,假設(shè)一個(gè)應(yīng)用程序向一個(gè)不支持異步I/O 的操作系統(tǒng)的磁盤寫入了 1000 個(gè)塊。每次寫操作都是按順序發(fā)生的,并等待寫操作成功的確認(rèn)。使用異步磁盤,應(yīng)用程序可以批量寫入塊并執(zhí)行其他工作,同時(shí)等待已寫入所有塊的操作系統(tǒng)的響應(yīng)。

為了模擬異步I/O ,一個(gè)進(jìn)程監(jiān)視多個(gè)從屬進(jìn)程。 調(diào)用程序進(jìn)程將工作分配給每個(gè)從屬進(jìn)程,它們等待每次寫入完成并在完成后向調(diào)用程序報(bào)告。

在真正的異步I/O 中,操作系統(tǒng)等待 I/O 完成并向 進(jìn) 程報(bào)告,而在模擬異步I/O 中,從操作系統(tǒng)等待并向調(diào)用者報(bào)告。

數(shù)據(jù)庫支持不同類型的I/O slave ,包括 :

? 恢復(fù)管理器 (RMAN) I/O  slave

在使用RMAN 備份或恢復(fù)數(shù)據(jù)時(shí),可以對(duì)磁盤和磁帶設(shè)備使用 I/O 從設(shè)備。

?Database writer slaves

當(dāng)計(jì)算機(jī)有一個(gè)CPU 時(shí), 無法 使用多個(gè)數(shù)據(jù)庫寫進(jìn)程 , 那么數(shù)據(jù)庫可以將I/O 分布在多個(gè)從進(jìn)程上。 DBW 是惟一一個(gè)掃描緩沖區(qū)緩存 LRU 列表以查找要寫到磁盤上的塊的進(jìn)程。但是,從 I/O 執(zhí)行這些塊的 I/O 。

并行執(zhí)行(PX) 服務(wù)器進(jìn)程

在并行執(zhí)行中,多個(gè)進(jìn)程同時(shí)運(yùn)行一條SQL 語句。

通過將工作分配給多個(gè)進(jìn)程,Oracle 數(shù)據(jù)庫可以更快地運(yùn)行語句。例如,四個(gè)流程 處理 一年 四個(gè)不同的季度,而不是一個(gè)流程獨(dú)自處理所有四個(gè)季度。

并行執(zhí)行與串行執(zhí)行形成對(duì)比,在串行執(zhí)行中,單個(gè)服務(wù)器進(jìn)程執(zhí)行SQL 語句的順序執(zhí)行所需的所有處理。例如,為了執(zhí)行完整的表掃描,例如 SELECT * FROM employees ,一個(gè)服務(wù)器進(jìn)程執(zhí)行所有的工作 。

歡迎關(guān)注我的微信公眾號(hào)"IT Chen" ,共同學(xué)習(xí),共同成長(zhǎng)?。?!

Oracle面試寶典-進(jìn)程結(jié)構(gòu)篇

Oracle面試寶典-進(jìn)程結(jié)構(gòu)篇

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI