1. 程式人生 > >Oracle 資料庫 體系結構 (二):伺服器結構

Oracle 資料庫 體系結構 (二):伺服器結構

目錄

  • 前言
  • Oracle 記憶體結構
  • Oracle 程序結構
  • 文章總結

前言

  • 上一篇文章體現了 Oracle 資料庫的一些基本結構和儲存結構,這篇文章將會講到Oracle的伺服器結構,實際上就是主要講例項的結構。需要把這些底層的結構瞭解,在生產環境或是對Oracle才會有一些瞭解。
  • Oracle伺服器是由Oracle例項+Oracle資料庫組成。
  • Oracle例項是有SGA+後臺程序組成。 每一個Oracle例項都有自己的SGA和獨立的Oracle程序集。

Oracle 記憶體結構

Oracle 資料庫 體系結構 (二):伺服器結構
以上圖很好說明了記憶體的結構,下面將會詳細介紹記憶體結構。


記憶體結構是Oracle資料庫體系中最為重要的一部分,資料庫例項啟動時,Oracle資料庫會分配記憶體區並啟動後臺程序。
Oracle記憶體儲存的主要內容有:

  • 程式程式碼(PL/SQL、Java);
  • 關於已經連結的會話的資訊,包括當前所有活動非活動的會話;
  • 程式執行時必須的相關資訊,如查詢計劃;
  • Oracle 程序之間的通訊和共享的資訊,如:鎖。

Oracle記憶體結構包含:

1·系統全域性區 (SGA):Oracle啟動例項時分配系統全域性區
2·程式全域性去 (PGA):當伺服器啟動時分配程式全域性區
3·使用者全域性區 (UGA):使用者全域性區為使用者儲存會話狀態

Oracle 資料庫 體系結構 (二):伺服器結構

系統全域性區(SGA)

系統全域性區 (SGA):資料庫資訊儲存於系統全域性區,由多個數據庫共享。是佔用伺服器記憶體最大的一個區域,是影響資料庫最重要的一個指標,和後臺程序組成了Oracle例項。

系統全域性區 (SGA)的組成:

* 共享池 (含:庫快取記憶體、資料高速字典快取);
* 資料快取記憶體;
* 重做日誌緩衝區;
* Java池;
* 大緩衝區。

Oracle 資料庫 體系結構 (二):伺服器結構

共享池:是對SQL、PLSQL程式程序語法分析、編譯、執行的記憶體區域。是由兩個關鍵記憶體結構組成,分別是:
1·庫快取記憶體:儲存最近解析使用的 SQL和PL/SQL語句資訊。Oracle 在執行使用者程序提交的各種SQL語句前要對進行解析(包括語法解析、物件確認、許可權判斷、操作優化等)並生產執行計劃,佔用一定的系統資源。
2·資料字典快取記憶體

:最近使用物件定義的集合,包括資料檔案、表、索引、列、使用者、許可權、和資料庫物件的資訊。


資料快取記憶體區:可以加快訪問速度,把一些經常用到的都放到快取區,因為資料庫的目的除了安全還有就是訪問效率。伺服器程序將讀入的資料儲存在資料緩衝區中,當後續請求需要這些資料就在記憶體中找到,不需要從磁碟讀取。所有使用者共享。由三個池組成:1·預設池, 2·保持池(存放常用的資料) 3·回收池(存放不常使用的資料存),通過LRU演算法管理。
LRU演算法管理:它的原理是把常用的資料保留在池中,不常用的資料就退回去。


重做日誌緩衝區:錄所有的關於資料庫的變化,當執行DML,如:updata、delete、insert或create、alter、drop等語句時,Oracle都會為這些操作生產重做記錄,作用是:主要用於資料庫恢復、改變的資料都要依賴於redo日誌條目。
Oracle 資料庫 體系結構 (二):伺服器結構


大緩衝區:用於需要大記憶體操作提供相對獨立的記憶體空間,以便提高效能,大池是可選的記憶體結構,DBA可以決定是否需要在SGA中建立大池,比如:資料庫備份和恢復、大量排序的SQL語句、並行化的資料庫操作。


Java池:在安裝Java程式時必須設定Java池,編譯Java語言寫的指令。


SQL> show sga; ----------------(檢視 系統全域性區 SGA 大小)

Total System Global Area 1593835520 bytes
Fixed Size          8793256 bytes
Variable Size         905970520 bytes
Database Buffers      671088640 bytes
Redo Buffers            7983104 bytes

程式全域性區(PGA)

當伺服器啟動時分配的全域性區,就是Oracle伺服器啟動時需要佔用的記憶體!

  • 它包含單個伺服器程序所需的資料和控制資訊
  • 是在使用者程序連線到資料庫並建立一個會話時自動分配的,保持每個與Oracle資料庫連線的使用者程序所需的資訊
  • PGA為非共享區,只能單個程序使用,當一個使用者會話結束,PGA釋放。

使用者全域性區(UGA)

  • 使用者程序儲存會話狀態,就是你用哪個使用者登陸,會儲存一些使用者的狀態!
  • UGA可以作為PGA於SGA的一部分,具體位子取決於如何連線Oracle:若通過一個共享伺服器連線,UGA包含在SGA中;若是通過一個專有伺服器連線Oracle,UGA包含在專有伺服器PGA中

Oracle 程序結構

Oracle 例項有以下幾種程序:

* 使用者程序
* 伺服器程序
* 後臺程序

Oracle 資料庫 體系結構 (二):伺服器結構


使用者程序

使用者程序是一個需要與Oracle伺服器進行互動的程式。當用戶執行一個程式準備向資料庫伺服器傳送請求時,即建立了使用者程序!

伺服器程序

伺服器程序是用於處理連線該例項的使用者程序的請求。當用戶連線到Oracle例項建立會話時,建立的伺服器程序!

後臺程序

  • 後臺程序是Oracle資料庫為了保持系統最佳系統性能和協調多個使用者請求而設定的。Oracle例項啟動時則建立一系列的後臺程序!
  • 後臺程序使資料庫的記憶體結構和資料庫物理結構之間協調工作。
    Oracle 資料庫 體系結構 (二):伺服器結構
  • 後臺程序必須啟動的5個程序分別是:DBWR、LGWR、PMON、SMON、CKPT。

PMON 程序監控程序:

* 清理出現故障的程序;
* 釋放當前所有掛載的鎖定;
* 釋放故障程序使用的資源。

SMON 系統監控程序:

* 在例項失敗後,重新開啟資料庫時自動恢復例項;
* 整理資料檔案的自由空間,將相鄰空間結合起來;
* 釋放不再使用的臨時段。

DBWR 資料寫入程序:

* 管理資料緩衝區,將最近使用過的塊保留在記憶體中;
* 將修改後的緩衝區資料寫入資料檔案中。

LGWR 日誌寫入程序:

* 負責將日誌緩衝區的日誌資料寫入日誌檔案;
* 系統有多個日誌檔案,該程序以迴圈的方式將資料寫入檔案。

CKPT 校驗程序:

* 從檢查點佇列上掃描髒資料塊,並將這些髒資料塊寫入資料檔案中;
* 檢查點佇列上的buffer header 是按照資料塊第一次被髒的時間先後順序來排列的;
* 越早修改的資料塊的buffer header排在越前面;
* 同時如果一個數據塊被修改了多次的話,在該連結串列上也只出現一次。

總結

Oracle 資料庫 體系結構 (二):伺服器結構

太多的理論,還需要用圖來理解記憶!所以總結就用一張圖來表示。