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算法管理:它的原理是把經常使用的數據保留在池中,不經常使用的數據就退回去。ide


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


大緩衝區:用於須要大內存操做提供相對獨立的內存空間,以便提升性能,大池是可選的內存結構,DBA能夠決定是否須要在SGA中建立大池,好比:數據庫備份和恢復、大量排序的SQL語句、並行化的數據庫操做。優化


Java池:在安裝Java程序時必須設置Java池,編譯Java語言寫的指令。3d


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 數據庫 體系結構 (二):服務器結構

太多的理論,還須要用圖來理解記憶!因此總結就用一張圖來表示。

相關文章
相關標籤/搜索