Process Architecture

fywocp發表於2013-12-03

Process Architecture

Introduction to Processes

程式是在作業系統中可以執行一系列步驟的機制。該機制取決於作業系統。例如,在Linux上的一個Oracle 後臺程式是一個Linux 程式。而在 Windows 上的一個 Oracle 後臺程式是在某個程式內執行的一個執行緒。

程式碼模組由程式來執行。所有已連線的 Oracle 資料庫使用者必須執行以下模組來訪問資料庫例項:

應用程式或 Oracle 資料庫實用程式

資料庫使用者執行一個資料庫應用程式,如預編譯器程式或資料庫工具(如SQL*Plus),來向資料庫發出 SQL 語句。

Oracle資料庫程式碼

每個使用者都具有為其執行的 Oracle 資料庫程式碼,以解釋和處理應用程式的 SQL 語句。

程式通常在其自己的私有記憶體區內執行。大多數程式可以定期寫入一個關聯的跟蹤檔案

Multiple-Process Oracle Database Systems

多程式 Oracle (也稱為多使用者 Oracle) 使用幾個程式來執行 Oracle 資料庫程式碼的不同部分,併為使用者執行一些其他程式——要麼每個連線的使用者一個程式,或由多個使用者共享一個或多個程式。大多數資料庫都是多使用者的,因為資料庫的主要優勢是管理同時由多個使用者所需的資料。

資料庫例項中的每個程式執行某個特定的作業。通過將資料庫和應用程式的工作劃分成幾個程式,多個使用者和應用程式可以同時連線到例項,而系統仍可提供較好的效能。

Types of Processes

資料庫例項包含如下型別的程式,或與以下型別的程式進行互動:

客戶端程式,執行應用程式或 Oracle 工具程式碼。

Oracle 程式,執行 Oracle 資料庫程式碼。Oracle 程式包括下列子型別:

後臺程式,與資料庫例項同時啟動,並執行一些維護任務,如執行例項恢復、清理程式、將重做緩衝區寫入磁碟等。

伺服器程式,基於客戶端請求,執行相應的工作。例如,這些程式解析 SQL 查詢、將查詢放入共享池、為查詢建立並執行查詢計劃、和將資料從資料庫緩衝區快取記憶體(或從磁碟)讀入緩衝區。

從屬程式,為後臺程式或伺服器程式執行額外任務。

圖顯示了使用專用伺服器連線時的系統全域性區 (SGA) 和後臺程式。對每個使用者連線,應用程式由一個客戶端程式來執行,而由其專用伺服器程式來執行資料庫程式碼。每個客戶端程式都與其自己的伺服器程式相關聯,而每個伺服器程式都有其自己的程式全域性區(PGA)。

Overview of Client Processes

當使用者執行一個應用程式(如Pro*C 程式或 SQL*Plus)時,作業系統會建立一個客戶端程式 (有時稱為使用者程式)來執行使用者應用程式。客戶端應用程式具有已連結到程式的Oracle 資料庫庫檔案,以提供與資料庫進行通訊所需的API

Client and Server Processes

客戶端程式和與例項直接互動的 Oracle 程式在某些重要方面不同。為客戶端程式服務的 Oracle 程式可能會讀取或寫入SGA,而客戶端程式不能。客戶端程式可以在資料庫主機之外另一臺主機上執行,而 Oracle 程式不能。

例如,假設在客戶端主機上的某個使用者啟動 SQL*Plus,並通過網路連線到另一臺主機上的sample資料庫(該資料庫例項還未啟動):

SQL> CONNECT SYS@inst1 AS SYSDBA

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

Connected to an idle instance.

在客戶端主機上,搜尋 sqlplus sample相關程式,顯示只有 sqlplus 客戶端程式:

% ps -ef | grep -e sample -e sqlplus | grep -v grep

clientuser 29437 29436 0 15:40 pts/1 00:00:00 sqlplus as sysdba

在資料庫主機上,搜尋 sqlplus sample相關程式,顯示一個非本地連線的伺服器程式,但沒有客戶端程式:

% ps -ef | grep -e sample -e sqlplus | grep -v grep

serveruser 29441 1 0 15:40 ? 00:00:00 oraclesample (LOCAL=NO)

Connections and Sessions

連線是在客戶端程式和資料庫例項之間的一條物理通訊路徑。通訊路徑使用可用的程式間通訊機制或網路軟體來建立。通常,連線在客戶端程式和伺服器程式(或排程器程式)之間產生,但它也可以在客戶端程式與 Oracle 連線管理器 (CMAN)之間產生。

會話是資料庫例項記憶體中的一個邏輯實體,表示登入到資料庫的某個當前使用者的狀態。例如,當使用者使用密碼通過了資料庫身份驗證時,會為此使用者建立一個會話。會話的持續時間從使用者通過資料庫驗證開始,直到使用者斷開連線,或退出資料庫應用程式。

在單個連線之上,可以建立0個、 1個、或多個會話。這些會話相互獨立:一個會話中的事務提交併不會影響其他會話中的事務。

如果配置了 Oracle 網路連線池,則可能出現連線已斷掉、而會話卻保持不變的情況。

單個資料庫使用者可能會同時執行多個會話。如圖 15-2所示,hr使用者可能具有到資料庫的多個連線。對於專用伺服器連線,資料庫為每個連線建立一個伺服器程式。只有導致建立該專用伺服器程式的客戶端程式才能使用它(該會話)。對於共享伺服器連線,由多個客戶端程式訪問單個共享伺服器程式。

每個連線一個會話

單個連線中的兩個會話

生成一個SQL 語句執行統計資訊的自動跟蹤報告,將再現單個連線中的兩個會話中的場景。每個連線一個會話使用SYSTEM使用者從SQL*Plus連線到資料庫,並啟用跟蹤,從而建立一個新的會話 (包括示例輸出)。

示例1有兩個會話的單個連線.

SQL> SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME = USER;

SID SERIAL# PADDR

--- ------- --------

90 91 3BE2E41C

SQL> SET AUTOTRACE ON STATISTICS;

SQL> SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME = USER;

SID SERIAL# PADDR

--- ------- --------

88 93 3BE2E41C

90 91 3BE2E41C

...

SQL> DISCONNECT

DISCONNECT命令實際上只是結束了會話,而未中斷連線。開啟一個新的終端並以一個不同的使用者連線到例項,示例2中的查詢顯示,示例15-1中的連線仍處於活動狀態。

SQL> CONNECT dba1@inst1

Password: ********

Connected.

SQL> SELECT PROGRAM FROM V$PROCESS WHERE ADDR = HEXTORAW('3BE2E41C');

PROGRAM

------------------------------------------------

oracle@stbcs09-1 (TNS V1-V3)

Overview of Server Processes

Oracle 資料庫建立伺服器程式,以處理連線到例項的客戶端程式的請求。客戶端程式總是通過單獨的伺服器程式與資料庫進行通訊。

為某個資料庫應用程式建立的伺服器程式,可以執行一個或多個下列任務:

解析並執行通過應用程式發出的SQL 語句,包括建立和執行查詢計劃

執行 PL/SQL 程式碼

將資料塊從資料檔案讀入資料庫緩衝區快取記憶體 (將已修改的塊寫回磁碟是DBWn 後臺程式的任務)

返回結果資訊,以便應用程式可以進一步處理

Dedicated Server Processes

對於專用伺服器連線,客戶端連線與一個且僅與一個伺服器程式相關聯。在 Linux上,連線到一個資料庫例項的 20 個客戶端程式,有相應的20個伺服器程式為其提供服務。

每個客戶端程式直接與其伺服器程式進行通訊。在會話期間,此伺服器程式專用於其客戶端程式。伺服器程式將特定於程式的資訊和UGA 儲存在其 PGA

Shared Server Processes

對於共享伺服器連線,客戶端應用程式通過網路連線到一個排程器程式,而不是一個伺服器程式。例如 ,20個客戶端程式可能會僅連線到一個單一的排程器程式。

排程器程式接收來自已連線客戶端的請求,並將它們放入大池中的請求佇列。第一個可用的共享伺服器程式從佇列承接一個請求並處理之。之後,共享伺服器程式將結果放回撥度器響應佇列。排程器程式會監視此佇列,並將結果傳回客戶端。

與專用伺服器程式類似,共享伺服器程式也有其自己的 PGA。但是,會話的UGA 位於 SGA中,以便任何共享伺服器程式可以訪問其中的會話資料。

Overview of Background Processes

多程式Oracle 資料庫會使用某些稱為後臺程式的額外程式。後臺程式執行運算元據庫所需的維護任務,並最大化多使用者效能。每個後臺程式都有其單獨的任務,但又與其他程式相互協作。

資料庫例項啟動時,Oracle 資料庫將自動建立後臺程式。例項可能會有許多後臺程式,但並不是所有這些程式在每種資料庫配置中都存在。以下查詢列出了在您的資料庫上執行的後臺程式:

SELECT PNAME

FROM V$PROCESS

WHERE PNAME IS NOT NULL

ORDER BY PNAME;

Mandatory Background Processes

強制性後臺程式存在於所有典型的資料庫配置。預設情況下,這些程式執行在以一個最小化配置的初始化引數檔案啟動的資料庫例項中

主要有以下程式:

程式監視器程式 (PMON)

? 系統監視器程式(SMON)

? 資料庫寫入器程式(DBWn)

? 日誌寫入器程式(LGWR)

? 檢查點程式(CKPT)

? 可管理性監視器程式(MMON and MMNL)

? 恢復器程式(RECO)

Process Monitor Process (PMON)

監視器 (PMON) 監視其他的後臺程式,並在某個伺服器程式或排程器程式異常終止時執行程式恢復。PMON 負責清理資料庫緩衝區快取記憶體,並釋放客戶端程式以前還在使用的資源PMON 還將例項和排程器程式的資訊註冊到Oracle 網路監聽器。當例項啟動時, PMON 輪詢監聽器以確定它是否正在執行。如果監聽器正在執行,則PMON將有關引數傳遞給它。如果監聽器未執行,則 PMON 定期嘗試聯絡它。

System Monitor Process (SMON)

系統監視器程式 (SMON) 負責各種系統級清理職責。分配給 SMON 的職責包括:

如有必要,在例項啟動時執行例項恢復。在 Oracle RAC 資料庫中,一個資料庫例項的 SMON 程式可以為另一個失敗的例項執行例項恢復。

在例項恢復期間,由於讀檔案或表空間離線錯誤而跳過的已終止事務,由SMON進行恢復。當表空間或檔案重新聯機時,SMON 將恢復該事務。

清理未使用的臨時段。例如, Oracle 資料庫在建立索引時會分配擴充套件區。如果操作失敗,則SMON 會清理臨時空間。

合併在字典管理的表空間中的多個連續空閒擴充套件區。

Database Writer Process (DBWn)

資料庫寫入器程式 (DBWn) 將資料庫緩衝區的內容寫入到資料檔案中。DBWn 程式將資料庫快取中被修改的緩衝區寫入到磁碟中。

雖然一個資料庫寫入程式 (DBW0) 對於大多數系統來說已經足夠,但如果您的系統大量修改資料,您也可以配置額外的寫入器程式——從DBW1DBW9,和從DBWa DBWj ——來提高寫入效能。這些額外的 DBWn 程式在單處理器系統上用處不大。

DBWn 程式在下列條件下會將髒緩衝區寫入到磁碟:

當伺服器程式掃描了額定數目的緩衝區後,仍未找到乾淨的可重複使用的緩衝區時,它會通知DBWn 執行寫入操作。DBWn 儘可能以非同步方式將髒緩衝區寫入到磁碟,以便同時能執行其他處理。

DBWn 週期性地寫出緩衝區,以推進檢查點,該點是重做執行緒中例項恢復開始的位置。檢查點的日誌位置由在緩衝區快取記憶體中最老的髒緩衝區確定。

在許多情況下,DBWn寫入的塊將遍佈整個磁碟。因此,該寫操作往往要比由 LGWR 執行的順序寫入速度慢。DBWn 程式儘可能進行多塊寫入,以提高效率。多塊寫入的資料塊數量因作業系統而異。

Log Writer Process (LGWR)

日誌寫入器程式 (LGWR) 管理重做日誌緩衝區。LGWR 將緩衝區中的一個連續部分寫入聯機重做日誌。通過分離各種修改資料庫緩衝區任務,將髒緩衝區分散寫入到磁碟,而將重做緩衝區順序寫入到磁碟,提高了資料庫效能。

在以下的情況下, LGWR將自上次最後寫入以來,複製到緩衝區的所有重做條目寫入聯機重做日誌:

使用者提交了事務

發生了線上重做日誌切換。

LGWR 最後一次寫入到現在超過了三秒。

重做日誌緩衝區已達到三分之一滿,或包含 1 MB以上被緩衝的資料。

DBWn 必須將修改的緩衝區寫入到磁碟。

DBWn 可以將髒緩衝區寫到磁碟之前,與該緩衝區更改相關聯的重做記錄必須先被寫入磁碟 (預寫協議)。如果DBWn 發現一些重做記錄尚未寫入,則它通知LGWR 將記錄寫入磁碟,並等待 LGWR完成此工作,然後DBWn才將資料緩衝區寫入磁碟。

LGWR and Commits

Oracle 資料庫使用快速提交機制來提高已提交事務的效能。當使用者發出 COMMIT 語句時,事務分配到一個系統更改號 (SCN)LGWR 將一個提交記錄記入重做日誌緩衝區,連同提交SCN和事務的重做條目,並立即寫入到磁碟。

重做日誌緩衝區是迴圈的。當 LGWR 將重做條目從重做日誌緩衝區寫入到聯機重做日誌檔案時,伺服器程式可以複製新條目並覆蓋已寫入到磁碟的重做日誌緩衝區中的條目。通常LGWR的寫入速度足夠快,以確保在緩衝區中總會有可用空間供新條目使用,即使對聯機重做日誌的訪問很繁重時也是如此。

包含事務提交記錄的重做條目的原子寫入,是確定該事務已提交的唯一事件。Oracle 資料庫向已提交事務返回一個成功程式碼,雖然資料緩衝區尚未寫入到磁碟。對資料塊的相應更改被延遲,直到DBWn 在某個有利的時機將它們寫到資料檔案。

LGWR 可能會在提交事務之前,將重做日誌條目寫入到磁碟。只有之後提交了事務,這些重做條目才會成為永久性的。

當事務活動很高時, LGWR 可能會使用組提交。例如,某個使用者提交其事務,導致LGWR將事務的重做條目寫入到磁碟。在此寫操作的過程中,其他使用者也試圖提交。但LGWR 無法寫入磁碟以提交這些事務,直到前面的寫入完成為止。完成後, LGWR 可以將(尚未提交的)等待事務中的重做條目列表在一個操作中全部寫入。通過這種方式,資料庫最小化了磁碟 I/O,而最大化了效能。如果提交請求繼續維持在一個高的水平,則每個LGWR寫入操作都可能包含多個提交記錄。

LGWR and Inaccessible Files

LGWR 同步寫入聯機重做日誌檔案組的所有活動映象。如果某個日誌檔案不可訪問,則 LGWR繼續寫入組中的其他檔案,並在 LGWR 跟蹤檔案和警報日誌中記錄一個錯誤。如果組中的所有檔案都損壞,或者如果因為尚未存檔而不可用,則LGWR 不能繼續工作。

Checkpoint Process (CKPT)

檢查點程式 (CKPT) 使用檢查點資訊更新控制檔案和資料檔案頭,並通知DBWn 將塊寫入磁碟。檢查點資訊包括檢查點位置、SCN、聯機重做日誌中的起始恢復位置等等。CKPT 不會將資料塊寫入資料檔案,也不會將重做塊寫入聯機重做日誌檔案。

Manageability Monitor Processes (MMON and MMNL)

可管理性監視器程式 (MMON) 執行許多與自動工作負載儲存庫 (AWR) 相關的任務。例如, 當某個度量超出其閾值時,MMON 會寫入資訊,並拍攝快照,捕獲最近修改的 SQL 物件的統計資訊。

可管理性監視器輕量程式 (MMNL) 將SGA中的活動會話歷史 (ASH) 緩衝區統計資訊寫入磁碟。當ASH緩衝區已滿時,MMNL 將其寫入到磁碟。

Recoverer Process (RECO)

在一個分散式資料庫中,恢復器程式 (RECO) 會自動解決在分散式事務中的故障。一個節點的RECO程式會自動連線到可疑分散式事務中涉及的其他資料庫。當RECO資料庫之間重新建立了連線後,它會自動解決所有可疑事務,從每個資料庫事務表中刪除任何與可疑事務對應的未決事務行。

Optional Background Processes

可選後臺程式即是未定義為強制性的後臺程式。大多數可選後臺程式是特定於任務或功能特性的。例如,支援 Oracle 流高階佇列 (AQ) Oracle 自動儲存管理 (Oracle ASM) 的後臺程式,只有在啟用這些功能時才可用。

常見的可選流程:

Archiver Processes (ARCn)

? Job Queue Processes (CJQ0 and Jnnn)

? Flashback Data Archiver Process (FBDA)

? Space Management Coordinator Process (SMCO)

Archiver Processes (ARCn)

重做日誌切換髮生後,歸檔器程式(ARCn) 將聯機重做日誌檔案複製到離線儲存。這些程式也可能會收集事務重做資料,並將其傳送到備用資料庫目標位置。僅當資料庫處於歸檔模式下且啟用了自動歸檔時,才存在ARCn 程式。

Job Queue Processes (CJQ0 and Jnnn)

Oracle 資料庫使用作業佇列程式來執行使用者作業,通常使用批處理模式。作業是一種使用者定義的被計劃執行一次或多次的任務。例如,您可以使用作業佇列來計劃一個在後臺長時間執行的更新任務。給定一個開始日期和時間間隔,作業佇列程式嘗試在下一個間隔重新執行該作業。

Oracle 資料庫動態管理作業佇列程式,以使作業佇列客戶端在需要時能使用更多作業佇列程式。當這些新啟動的程式處於空閒狀態時,資料庫會釋放其資源。

Flashback Data Archiver Process (FBDA)

閃回資料歸檔器程式 (FBDA) 將跟蹤錶的歷史行歸檔到閃回資料歸檔區。當跟蹤表中包含 DML的事務提交時,該程式將行的前像儲存到閃回資料存檔區。它也會儲存當前行上的後設資料。FBDA 自動管理閃回資料存檔的空間、 組織、和保留期等。此外,該程式會跟蹤被跟蹤的事務歸檔已發生了多久。

Space Management Coordinator Process (SMCO)

SMCO程式協調各種空間管理相關的任務,比如主動預防性的空間分配和空間回收。SMCO動態生成從屬程式 (Wnnn) 來執行此任務。

Slave Processes

從屬程式是為其他程式執行工作的後臺程式。

I/O Slave Processes

I/O 從屬程式 (Innn) 為不支援非同步 I/O的系統和裝置模擬非同步 I/O。非同步的 I/O沒有傳輸時間要求,使其他程式可以在完成傳輸之前就可以開始。

例如,假定應用程式在一個不支援非同步 I/O 的作業系統上寫入1000個塊到磁碟。每次寫入都是順序發生的,並等待一個寫操作已成功的確認。而對於非同步磁碟,應用程式可以大容量寫入資料塊,並在等待作業系統確認寫入完的同時執行其他工作。

為模擬非同步 I/O,由一個程式監督幾個從屬程式。呼叫者程式將工作分配給每個從屬程式,從屬程式會等待每個寫操作完成,並在完成後報告呼叫者。在真正的非同步 I/O中,作業系統會等待 I/O 完成,並在完成時報告主程式,而在模擬非同步 I/O中,從屬程式會等待,並在完成時報告呼叫者。

資料庫支援包括以下不同型別的 I/O 從屬程式:

恢復管理器 (RMAN)I/O 從屬程式

當使用RMAN備份或還原資料時,您可以為磁碟和磁帶裝置使用I/O 從屬程式。

資料庫寫入器從屬程式

如果計算機只有一個CPU,則資料庫使用多個寫入器程式並不現實,此時資料庫可以通過多個從屬程式來分佈 I/ODBWR 是掃描緩衝區快取記憶體 LRU 列表中的塊以寫入到磁碟的唯一程式。而I/O 從屬程式為這些塊執行I/O

Parallel Query Slaves

在並行執行或並行處理中,多個程式同時協作,來執行一個單一 SQL 語句。通過在多個程式之間分配工作,Oracle 資料庫可以更快地執行語句。例如,四個程式分別處理一年中四個不同的季度,而不是由一個程式處理所有四個季度。

並行執行減少了在大型資料庫(如資料倉儲)上的資料密集型操作的響應時間。對稱多處理 (SMP) 和叢集系統能從並行執行獲得最大的效能優勢,因為語句處理可以在多個 CPU之間劃分。並行執行也可以使某些型別的 OLTP 和混合系統受益。

Oracle RAC 系統中,由特定服務的服務配置控制並行執行。具體而言,並行程式在已配置服務的多個節點上執行。預設情況下,Oracle 資料庫只在提供資料庫連線服務的例項上執行並行程式。這並不影響其他並行操作,如並行恢復或對 GV$查詢的處理。

Serial Execution

在序列執行中,由單個伺服器程式,執行順序執行的某個 SQL 語句的所有必要處理。例如,執行一個全表掃描(如SELECT * FROM employees),由一個伺服器程式執行所有的工作

Parallel Execution

在並行執行中,伺服器程式作為並行執行協調器,負責解析查詢、分配和控制從屬程式、並將輸出傳送給使用者。給定一個 SQL 查詢的查詢計劃,協調器將SQL 查詢中的每個運算子分解成一些平行的片斷、 並按查詢中指定的順序執行它們,最後又將這些執行各個操作的從屬程式所產生的部分結果整合起來。

資料庫在執行時將顆粒對映到執行伺服器。當一個執行伺服器完成對某個顆粒對應行的讀取,而此時還有其它顆粒要讀取時,該執行伺服器從協調器獲取另一個顆粒。此操作將繼續,直到讀取完整個表。執行伺服器向協調器傳送執行結果,協調器再將這些片斷合併成最終所需的全表掃描結果。

分配給單個操作的並行執行伺服器的數量是操作的並行度。在同一 SQL 語句中的多個操作都具有相同的並行度。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25427762/viewspace-1062036/,如需轉載,請註明出處,否則將追究法律責任。

相關文章