Oracle 資料庫 體系結構 (二):伺服器結構
目錄
- 前言
- Oracle 記憶體結構
- Oracle 程序結構
- 文章總結
前言
- 上一篇文章體現了 Oracle 資料庫的一些基本結構和儲存結構,這篇文章將會講到Oracle的伺服器結構,實際上就是主要講例項的結構。需要把這些底層的結構瞭解,在生產環境或是對Oracle才會有一些瞭解。
- Oracle伺服器是由Oracle例項+Oracle資料庫組成。
- Oracle例項是有SGA+後臺程序組成。 每一個Oracle例項都有自己的SGA和獨立的Oracle程序集。
Oracle 記憶體結構
以上圖很好說明了記憶體的結構,下面將會詳細介紹記憶體結構。
記憶體結構是Oracle資料庫體系中最為重要的一部分,資料庫例項啟動時,Oracle資料庫會分配記憶體區並啟動後臺程序。
Oracle記憶體儲存的主要內容有:
- 程式程式碼(PL/SQL、Java);
- 關於已經連結的會話的資訊,包括當前所有活動非活動的會話;
- 程式執行時必須的相關資訊,如查詢計劃;
- Oracle 程序之間的通訊和共享的資訊,如:鎖。
Oracle記憶體結構包含:
1·系統全域性區 (SGA):Oracle啟動例項時分配系統全域性區 2·程式全域性去 (PGA):當伺服器啟動時分配程式全域性區 3·使用者全域性區 (UGA):使用者全域性區為使用者儲存會話狀態
系統全域性區(SGA)
系統全域性區 (SGA):資料庫資訊儲存於系統全域性區,由多個數據庫共享。是佔用伺服器記憶體最大的一個區域,是影響資料庫最重要的一個指標,和後臺程序組成了Oracle例項。
系統全域性區 (SGA)的組成:
* 共享池 (含:庫快取記憶體、資料高速字典快取);
* 資料快取記憶體;
* 重做日誌緩衝區;
* Java池;
* 大緩衝區。
共享池:是對SQL、PLSQL程式程序語法分析、編譯、執行的記憶體區域。是由兩個關鍵記憶體結構組成,分別是:
1·庫快取記憶體:儲存最近解析使用的 SQL和PL/SQL語句資訊。Oracle 在執行使用者程序提交的各種SQL語句前要對進行解析(包括語法解析、物件確認、許可權判斷、操作優化等)並生產執行計劃,佔用一定的系統資源。
2·資料字典快取記憶體:最近使用物件定義的集合,包括資料檔案、表、索引、列、使用者、許可權、和資料庫物件的資訊。
資料快取記憶體區:可以加快訪問速度,把一些經常用到的都放到快取區,因為資料庫的目的除了安全還有就是訪問效率。伺服器程序將讀入的資料儲存在資料緩衝區中,當後續請求需要這些資料就在記憶體中找到,不需要從磁碟讀取。所有使用者共享。由三個池組成:1·預設池, 2·保持池(存放常用的資料) 3·回收池(存放不常使用的資料存),通過LRU演算法管理。
LRU演算法管理:它的原理是把常用的資料保留在池中,不常用的資料就退回去。
重做日誌緩衝區:錄所有的關於資料庫的變化,當執行DML,如:updata、delete、insert或create、alter、drop等語句時,Oracle都會為這些操作生產重做記錄,作用是:主要用於資料庫恢復、改變的資料都要依賴於redo日誌條目。
大緩衝區:用於需要大記憶體操作提供相對獨立的記憶體空間,以便提高效能,大池是可選的記憶體結構,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例項啟動時則建立一系列的後臺程序!
- 後臺程序使資料庫的記憶體結構和資料庫物理結構之間協調工作。
- 後臺程序必須啟動的5個程序分別是:DBWR、LGWR、PMON、SMON、CKPT。
PMON 程序監控程序:
* 清理出現故障的程序;
* 釋放當前所有掛載的鎖定;
* 釋放故障程序使用的資源。
SMON 系統監控程序:
* 在例項失敗後,重新開啟資料庫時自動恢復例項;
* 整理資料檔案的自由空間,將相鄰空間結合起來;
* 釋放不再使用的臨時段。
DBWR 資料寫入程序:
* 管理資料緩衝區,將最近使用過的塊保留在記憶體中;
* 將修改後的緩衝區資料寫入資料檔案中。
LGWR 日誌寫入程序:
* 負責將日誌緩衝區的日誌資料寫入日誌檔案;
* 系統有多個日誌檔案,該程序以迴圈的方式將資料寫入檔案。
CKPT 校驗程序:
* 從檢查點佇列上掃描髒資料塊,並將這些髒資料塊寫入資料檔案中;
* 檢查點佇列上的buffer header 是按照資料塊第一次被髒的時間先後順序來排列的;
* 越早修改的資料塊的buffer header排在越前面;
* 同時如果一個數據塊被修改了多次的話,在該連結串列上也只出現一次。
總結
太多的理論,還需要用圖來理解記憶!所以總結就用一張圖來表示。