1. Oracle整體架構
Oracle整體架構包含Oracle數據庫正常運行的必需組件等。主要有實例(Instance),數據庫(Database)
1.1 實例(Instance)
數據庫實例是由服務器上的一組內存結構以及進程組成。用來支撐、完成數據庫的正常運行以及操作。
實例是可以獨立于數據庫存在的。其中實例包含了以下組件:
1.1.1 內存
即服務器OS為當前Instance分配的內存區域。主要用來完成數據庫內存的移動和操作。內存主要分為SGA(System Global Area) , PGA(Program or Process Global Area).
SGA是實例范圍內共享的,包含共享池,數據緩沖,Redo緩沖等。共享池包含庫緩沖和字典緩沖等。
PGA為各個會話私有。
1.1.2 后臺進程(Background Process)
實例創建和維護的一組后臺進程,其作用是完成數據中的統一管理和監控任務。進程是共享的,不屬于某個或某些會話
1.1.3 服務進程(Server Process)
實例為數據庫會話創建或分配,完成會話任務的Serve端服務進程。其中在專用服務器模式和共享服務器模式下又有不同。
- 專用服務器模式: 該模式下,用戶和數據庫服務器建立會話,Instance會為本次會話創建一個服務進程,用以完成此會話任務。
- 共享服務器模式下,Instance會維護一組服務進程,Instance調度進程會將會話放入共享任務的隊列中。該模式下所有的會話是共享一組服務進程的,也是一種池化思想。
1.2 數據庫(DataBase)
數據庫是由服務器上的一組磁盤文件組成,存儲著數據庫相關的管理信息和用戶數據,保證數據庫的正常運轉和用戶數據的不丟失。數據庫及其文件可以獨立于Instance存在。
數據庫中包含了許多類型的文件,主要有參數文件(Parameter File)、控制文件(Control File)、數據文件(Data File)、回滾文件(Undo File)、臨時文件(Temp File)、重做日志文件(Redo Log File)、歸檔日志文件(Archive Log File)、警告日志文件(Alert Log File)、跟蹤文件(Trace File)等
下面是一個比較完整的Oracle架構圖
2. Oracle內存架構
內存架構主要是說Oracle實例內存管理和使用相關的邏輯設計與實現等。這里我們概略地說一下SGA和PGA,讓大家有一個粗略的概念。
2.1 SGA(System Global Area)系統全局區
數據庫實例啟動時創建的一個共享內存區域。主要由共享池、數據緩沖、重做日志緩沖等諸多區域組成。
共享池是數據庫實例中最重要、最復雜的共享內存區域,里面存儲著數據庫最重要的結構和信息。
數據緩沖做為用戶數據的緩存區,在系統共享內存中暫存數據庫的數據塊,其實這塊的設計是為了提高數據庫的讀寫性能。
重做日志緩沖作為日志數據的緩沖區,在系統共享內存中暫存數據庫重做日志數據,可提高日志數據的讀寫性能。
2.2 PGA (Program Global Area) 程序全局區
服務進程存儲數據以及控制信息,以及完成相關任務的內存區域。相對于其他區域來說,該區域為私有區域。程序全局區域分為包含Stack Space、HashArea、UGA等。
- 共享服務器模式下,多個客戶端用戶共享服務進程,UGA被挪到了Large pool,PGA中只有stack space、hash area、bitmap merge area等。
- 專用服務器模式下,PGA包括 SQL工作區,Session memory,Private SQL Area 等
會話區(User Global Area UGA),為會話分配的內存區域,用于存儲各種會話變量,例如會話登錄信息以及會話需要的其他各種信息等。
SQL 工作區是為服務進程進行各種內存操作分配的PGA私有內存。比如Sort Area(排序區)用于數據排序功能(ORDER BY , GROUP BY 等)
3. Oracle存儲架構
Oracle數據庫最終還是使用磁盤作為存儲媒介,針對Oracle數據庫的存儲組織、分配、管理等,我們介紹一下(塊)block、(區間)extent、(段)segment、(表空間)tableSpace.
下圖為個存儲單元的關系示意圖。
3.1 Block
Block是Oracle數據庫讀寫的最小單元,Block size是系統層面塊大小整數倍。2KB、4KB.....
block 示意圖
- Header中包含塊的一些通用信息,block的地址,segment類型等
- Table dictionary 記錄了這個塊里面含有那些rows
- Row dictionary 包含了rows(數據行)的一些信息
3.2 Extent(區間)
區間是關于存儲空間的一個邏輯單位,由多個連續的塊組成,也是Oracle存儲空間分配的最小單元,若某個數據庫對象需要存儲空間時,Oracle至少要為其分配一個區間。
- 區間在段(Segment)被創建或段空間擴展時被分配。
- 當段被清除(drop)時,區間所占用的存儲空間會被釋放,會被系統中其他對象所使用
3.3 Segment(段)
段是由一組區間組成,包含了表空間內特定邏輯存儲結構的所有數據。針對每個表,Oracle分配一個或者多個區間形成該表的數據段(data segment),對于每一個索引,Oracle分配一個或者給多個區間組成索引段(index segment).
- 非分區表和非分區索引分別對應一個段,分區表和分區索引的每個分區或子分區對應一個段。
- 段是存儲數據庫對象數據的實體,是存放數據的真正邏輯結構和單元。
- 段可分為數據段(Data segment)、索引段(Index segment)、臨時段(Temporary segment)、回滾段(Rollback segment)等。
3.4 TableSpace(表空間)
Oracle數據庫中最大的存儲空間相關的邏輯概念和容器,存儲系統和用戶數據的段都是在表空間中分配的。表空間是共享資源,不同用戶或段可以存儲在同一個表空間,也可以存儲在不同的表空間中。
- Oracle將數據邏輯存儲在表空間中,物理存儲則在與表空間對應關聯的數據文件中。
- Oracle數據庫有一個或者多個表空間的邏輯存儲單元組成,這些表空間共同存儲所有的數據。
- Oracle中的每一個表空間有一個或者多個數據文件(data file)組成,這些數據文件與運行Oracle的系統的屋里存儲結構相匹配。
- 表空間分為數據表空間(Data Tablespace)、臨時表空間(Temporary Tablespace)、回滾表空間(Undo Tablespace)。
-
服務器
+關注
關注
12文章
9205瀏覽量
85558 -
內存
+關注
關注
8文章
3030瀏覽量
74109 -
數據庫
+關注
關注
7文章
3816瀏覽量
64465 -
Oracle
+關注
關注
2文章
289瀏覽量
35144
發布評論請先 登錄
相關推薦
評論