超詳細的oracle DB體系結構圖(一)

概述

一直想整理的oracle體系結構圖,之前一直沒有時間,這幾天抽空整理分享給大家。


超詳細的oracle DB體系結構圖(一)

Oracle DB 服務器由一個 Oracle DB 以及一個或多個數據庫實例組成。實例由內存結構和後臺進程構成。每當啟動一個實例時,都會分配一個稱為系統全局區 (SGA) 的共享內存區,並啟動後臺進程。

數據庫包括物理結構和邏輯結構。由於物理結構和邏輯結構是分開的,因此管理數據的物理存儲時不會影響對邏輯存儲結構的訪問。


超詳細的oracle DB體系結構圖(一)

示例說明了一種 Oracle DB 配置,在該配置中,用戶和關聯服務器進程運行於通過網絡連接的不同計算機上。

1. 在安裝了 Oracle DB 的節點(通常稱為“主機”或“數據庫服務器”)上啟動了一個實例。

2. 用戶啟動一個應用程序,該應用程序衍生了一個用戶進程。該應用程序嘗試建立一個與服務器的連接(此連接可能是本地連接、客戶機/服務器連接或來自中間層的三層連接)。

3. 服務器運行具有相應 Oracle Net Services 處理程序的監聽程序。監聽程序檢測到應用程序發出的連接請求,並創建一個代表用戶進程的專用服務器進程。

4. 用戶運行一條 DML 類型的 SQL 語句並提交事務處理。例如,用戶更改表中的客戶地址並提交更改。

5. 服務器進程接收該語句,並檢查共享池(一個 SGA 組件)中是否有包含相同 SQL 語句的共享 SQL 區域。如果找到共享 SQL 區域,服務器進程將檢查用戶對於所請求數據的訪問權限,並且使用現有的共享 SQL 區域處理該語句。如果未找到共享 SQL 區

域,則為該語句分配一個新的共享 SQL 區域,以便對該語句進行語法分析和處理。

6. 服務器進程從實際數據文件(表)或數據庫緩衝區高速緩存中存儲的值中檢索任何必需的數據值。

7. 服務器進程修改 SGA 中的數據。因為提交了事務處理,所以日誌寫進程 (LGWR) 會立即將該事務處理記錄到重做日誌文件中。數據庫寫進程 (DBWn) 會待執行效率高時將修改後的塊永久寫入磁盤。

8. 如果事務處理成功,服務器進程將通過網絡嚮應用程序發送一條消息。如果事務處理不成功,則傳送一條錯誤消息。

9. 在整個過程中,其它後臺進程同時在運行,用於監視是否有需要干預的情況。此外,數據庫服務器管理其他用戶的事務處理,並防止在請求相同數據的事務處理之間發生爭用。


超詳細的oracle DB體系結構圖(一)

啟動實例後, Oracle 軟件會將該實例與特定數據庫相關聯。該操作稱為“裝載數據庫”。

之後數據庫處於可打開狀態,即授權用戶可以對其進行訪問。可在一臺計算機上同時執行多個實例,每個實例訪問其各自的物理數據庫。可以將 Oracle DB 體系結構看作各種相互關聯的結構化組件。

Oracle 實例使用內存結構和進程來管理和訪問數據庫。所有內存結構都存在於構成數據庫服務器的那些計算機的主內存中。進程是在這些計算機的內存中運行的作業。進程被定義為操作系統中可運行一系列步驟的“控制線程”或機制。


超詳細的oracle DB體系結構圖(一)

Oracle DB 針對各種用途創建和使用內存結構。例如,使用內存來存儲正在運行的程序代碼、在各用戶之間共享的數據以及所連接的每個用戶的專用數據區域。

一個實例有兩個關聯的基本內存結構:

• 系統全局區 (SGA): 稱為 SGA 組件的共享內存結構組,這些組件包含一個 Oracle DB實例的數據和控制信息。 SGA 由所有服務器和後臺進程共享。 SGA 中存儲的數據示例包括高速緩存的數據塊和共享 SQL 區域。

• 程序全局區 (PGA): 包含某個服務器進程或後臺進程的數據及控制信息的內存區域。

PGA 是 Oracle DB 在服務器進程或後臺進程啟動時創建的非共享內存。服務器進程對PGA 的訪問是互斥的。每個服務器進程和後臺進程都具有自己的 PGA。

SGA 是包含實例的數據和控制信息的內存區。 SGA 包含以下數據結構:

• 數據庫緩衝區高速緩存: 用於緩存從數據庫中檢索到的數據塊

• 重做日誌緩衝區: 用來緩存用於實例恢復的重做信息,直到可以將其寫入磁盤中存儲的物理重做日誌文件

• 共享池: 用於緩存可在用戶間共享的各種結構

• 大型池: 為某些大型進程(例如 Oracle 備份和恢復操作)和 I/O 服務器進程提供大型內存分配的可選區域。

• Java 池: 用於 Java 虛擬機 (JVM) 中特定於會話的所有 Java 代碼和數據

• 流池: Oracle Streams 使用它來存儲捕獲和應用操作所需的信息


超詳細的oracle DB體系結構圖(一)

數據庫緩衝區高速緩存是 SGA 的一部分,用於存放從數據文件讀取的數據塊的副本。並行連接到實例的所有用戶共享對數據庫緩衝區高速緩存的訪問。

Oracle DB 用戶進程第一次需要特定數據片段時,將在數據庫緩衝區高速緩存中搜索數據。

如果該進程在高速緩存中找到數據(稱為高速緩存命中),則直接從內存中讀取數據。如果進程在高速緩存中找不到數據(稱為高速緩存未命中),則在訪問數據之前,必須將磁盤上的數據文件中的數據塊複製到高速緩存中的緩衝區中。高速緩存命中時訪問數據要比高速緩存未命中時訪問數據快。

高速緩存中的緩衝區由一個複雜算法管理,該算法組合使用最近最少使用 (LRU) 列表和停靠計數機制。


超詳細的oracle DB體系結構圖(一)

重做日誌緩衝區是 SGA 中的循環緩衝區,用於存放有關對數據庫所做更改的信息。此信息存儲在重做條目中。重做條目包含重建(或重做)由 DML、 DDL 或內部操作對數據庫進行的更改所需的信息。如果需要,將使用重做條目進行數據庫恢復。

服務器進程更改緩衝區高速緩存時,系統會生成重做條目,並將生成的重做條目寫入SGA 中的重做日誌緩衝區。重做條目佔用緩衝區中連續的順序空間。 LGWR 後臺進程將重做日誌緩衝區寫入磁盤上的活動重做日誌文件(或文件組)中。


超詳細的oracle DB體系結構圖(一)

SGA 的共享池部分包含庫高速緩存、數據字典高速緩存、 SQL 查詢結果高速緩存、PL/SQL 函數結果高速緩存、並行執行消息的緩衝區以及控制結構。

“數據字典”是數據庫表和視圖(它們包含有關數據庫、數據庫結構及其用戶的參考信息)的集合。在 SQL 語句語法分析期間, Oracle DB 會頻繁訪問數據字典。該訪問操作對於Oracle DB 的持續操作來說至關重要。

Oracle DB 對數據字典的訪問十分頻繁,因此在內存中指定了兩個特殊的位置來存放字典數據。

一個區域稱為“數據字典高速緩存”,也稱為“行高速緩存”,因為它以行的形式存放數據,而不是以緩衝區的形式存放數據(緩衝區用於存放完整的數據塊)。內存中的另一個用於存放字典數據的區域稱為“庫高速緩存”。所有 Oracle DB 用戶進程都共享這兩個高速緩存以便訪問數據字典信息。

Oracle DB 使用共享 SQL 區域(以及 PGA 中保留的專用 SQL 區域)來表示它所運行的每個 SQL 語句。 Oracle DB 可識別兩個用戶執行相同 SQL 語句的情況,從而為這些用戶重用共享 SQL 區域。


圖太多了,篇幅有限,只能分成幾部分分享給大家了。

其他2部分的內容,因為弄不了跳轉鏈接,其他內容只能大家關注然後去最近動態找了。

覺得有用的多多關注哦,後面側重多發一些關於DBA的筆記。

超詳細的oracle DB體系結構圖(一)


分享到:


相關文章: