您好,登錄后才能下訂單哦!
- 前言
- Oracle 內存結構
- Oracle 進程結構
- 文章總結
- 上一篇文章體現了 Oracle 數據庫的一些基本結構和存儲結構,這篇文章將會講到Oracle的服務器結構,實際上就是主要講實例的結構。需要把這些底層的結構了解,在生產環境或是對Oracle才會有一些了解。
- Oracle服務器是由Oracle實例+Oracle數據庫組成。
- Oracle實例是有SGA+后臺進程組成。 每一個Oracle實例都有自己的SGA和獨立的Oracle進程集。
以上圖很好說明了內存的結構,下面將會詳細介紹內存結構。
內存結構是Oracle數據庫體系中最為重要的一部分,數據庫實例啟動時,Oracle數據庫會分配內存區并啟動后臺進程。
Oracle內存存儲的主要內容有:
- 程序代碼(PL/SQL、Java);
- 關于已經鏈接的會話的信息,包括當前所有活動非活動的會話;
- 程序運行時必須的相關信息,如查詢計劃;
- Oracle 進程之間的通信和共享的信息,如:鎖。
1·系統全局區 (SGA):Oracle啟動實例時分配系統全局區
2·程序全局去 (PGA):當服務器啟動時分配程序全局區
3·用戶全局區 (UGA):用戶全局區為用戶存儲會話狀態
系統全局區 (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
當服務器啟動時分配的全局區,就是Oracle服務器啟動時需要占用的內存!
- 它包含單個服務器進程所需的數據和控制信息
- 是在用戶進程連接到數據庫并創建一個會話時自動分配的,保持每個與Oracle數據庫連接的用戶進程所需的信息
- PGA為非共享區,只能單個進程使用,當一個用戶會話結束,PGA釋放。
- 用戶進程存儲會話狀態,就是你用哪個用戶登陸,會存儲一些用戶的狀態!
- UGA可以作為PGA于SGA的一部分,具體位子取決于如何連接Oracle:若通過一個共享服務器連接,UGA包含在SGA中;若是通過一個專有服務器連接Oracle,UGA包含在專有服務器PGA中
Oracle 實例有以下幾種進程:
* 用戶進程
* 服務器進程
* 后臺進程
用戶進程是一個需要與Oracle服務器進行交互的程序。當用戶運行一個程序準備向數據庫服務器發送請求時,即創建了用戶進程!
服務器進程是用于處理連接該實例的用戶進程的請求。當用戶連接到Oracle實例創建會話時,創建的服務器進程!
- 后臺進程是Oracle數據庫為了保持系統最佳系統性能和協調多個用戶請求而設置的。Oracle實例啟動時則創建一系列的后臺進程!
- 后臺進程使數據庫的內存結構和數據庫物理結構之間協調工作。
- 后臺進程必須啟動的5個進程分別是:DBWR、LGWR、PMON、SMON、CKPT。
PMON 進程監控進程:
* 清理出現故障的進程;
* 釋放當前所有掛載的鎖定;
* 釋放故障進程使用的資源。
SMON 系統監控進程:
* 在實例失敗后,重新打開數據庫時自動恢復實例;
* 整理數據文件的自由空間,將相鄰空間結合起來;
* 釋放不再使用的臨時段。
DBWR 數據寫入進程:
* 管理數據緩沖區,將最近使用過的塊保留在內存中;
* 將修改后的緩沖區數據寫入數據文件中。
LGWR 日志寫入進程:
* 負責將日志緩沖區的日志數據寫入日志文件;
* 系統有多個日志文件,該進程以循環的方式將數據寫入文件。
CKPT 校驗進程:
* 從檢查點隊列上掃描臟數據塊,并將這些臟數據塊寫入數據文件中;
* 檢查點隊列上的buffer header 是按照數據塊第一次被臟的時間先后順序來排列的;
* 越早修改的數據塊的buffer header排在越前面;
* 同時如果一個數據塊被修改了多次的話,在該鏈表上也只出現一次。
太多的理論,還需要用圖來理解記憶!所以總結就用一張圖來表示。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。