- System Global Area (SGA):由所有Server Process和Background Processes共用.(主要功能是做為各種資料交換的暫存記憶體空間)
- Program Global Area (PGA):專用於每一個Server Process或Background Processes。每一個Process獨享一個 PGA
SGA 是包含Instance的資料和控制資訊的記憶體區。(為什麼要叫System Global Area;SGA因為它可以被Oracle所在的作業系統上所有的Process來共享裡面的資料,所以叫共享記憶體System Global Area簡稱為SGA,因此如果今天當你在不同的Process上要交換資料要如何做呢?就是把那些資料丟到SGA裡面去,如此大家都可以存取資料,因此SGA是Oracle裡主要交易的地方,因為在Oracle裡所有的交易都是在SGA裡面處理的,由此得知SGA對Oracle是一個非常重要的地方。)
SGA 包含以下資料結構:
Database Buffer Cache | 從資料庫中Catch資料區塊.(DB Buffer Cache主要的功能是用來暫時存放最近讀取自資料庫裡面的資料,也就是Data file內的資料,而Data File是以Block為單位,讀取到DB Buffer Cache中。當使用者透過應用程式第一次向Oracle資料庫送出查詢需求時,Oracle會先在資料庫緩衝快取區內尋找該資料,如果有需要的資料,就直接從資料庫緩衝快取區回傳給使用者,如此可減少硬碟上的I/O次數,如果Oracle發現使用者要的資料並不在裡面,會從資料庫中讀取所需要的Data blocks,先放入DB Buffer Cache裡面,再傳給使用者) | |
Redo Log Buffer | 快取記憶體重做資訊(用於Instance恢復),直到可以將其寫入磁片中存儲的實體的重做日誌檔.Redo Log Buffer主要是用來追蹤記錄最近異動過的資料記錄。 | |
主要是存放最近執行過的SQL Statement、Data Dictionary與PL/SQL的一些資料、table的定義和權限等 | ||
Library Cache | Library Cache包含了Shared SQL Area、Private SQL Area、Package Area以及PL/SQL程式區,其主要功能是將Oracle解析完成的parse tree與execution plan,放在Shared SQL Area。 | |
Data Dictionary Cache | Data Dictionary Cache主要是存放table或view的名稱、欄位名稱、資料型態與使用者權限等。由於Oracle在解析SQL或執行的過程中,必須不斷查閱data dictionary內所有記錄的相關資訊,以備查詢之用。 | |
Large Pool | 是一個可選區域,可為某些大型Process(如 Oracle 備份和恢復作業、I/O Server Process)提供大量記憶體分配(Large Pool是SGA中的一塊可選記憶體區塊,同時Large Pool的功能是類似Shared Pool的記憶體緩衝區,與Shared Pool不同的是Large Pool在特殊的情況下才會使用,Large Pool,在以下情況下需要Large Pool:在多工處理架構模式MTS下,透過從Large Pool中分配給使用者連線使用排序(Sort Area)及雜湊演算(Hash Area)等作用。使用平行作業查詢(Parallel Query)時,作為大型連續檔案的I/O的緩衝區,使用Oracle RMAN時,Large Pool為其I/O緩衝區) | |
Java Pool | 用於 Java JVM 中特定Session的所有 Java Code和資料 | |
Streams Pool | 提供 Oracle Streams 使用 |
透過使用 Enterprise Manager 或 SQL*Plus 啟動Instance,可以顯示為 SGA 分配的記憶體量。
Program Global Area (PGA) :是包含各個Server Process的資料及控制資訊的記憶體區。Oracle Server Process為Client的請求提供服務。每個Server Process都有自己專用的 PGA,這個 PGA 是在Server Process啟動時建置的。由該Server Process對 PGA 進行獨享的權利,只有Oracle Code能對PGA進行讀寫。(PGA是一塊記憶體區塊,和共享記憶體(System Global Area;SGA)不同的是SGA是共用的記憶體區塊,而PGA是一塊私有的記憶體區塊,也就是說當一個使用者連線到Oracle資料庫時就會產生一個Server Process連線同時也會建立一個PGA的記憶體區塊,而PGA就是只提供給那一個Server Process專門使用,如果有10個Server Process就會產生10個PGA,因此在PGA裡面是不需要Latch所保護,因為專屬那個使用者連線,所以沒有別的連線來搶資源,而PGA 裡面包含server process正在執行的工作資訊與控制資訊)
注意
- 使用動態 SGA結構時,可以在不關閉實例的情況下,更改資料庫緩衝區快取記憶體、Shared Pool、Large Pool和 Java Pool以及 Streams Pool的大小。
- Oracle 資料庫使用初始化參數建置並分配記憶體結構。例如,SGA_TARGET 參數可指定SGA的總大小。如果 SGA_TARGET 設置為 0,則會禁用“Automatic Shared Memory Management”。
- Oracle有一個很重要的觀念,就是不到絕對必要,不會等待磁碟I/O,因為磁碟I/O是電腦系統運作中最慢的一個部份,因此,所執行的I/O是越少越好,在Oracle的資料庫架構設計裡面這種觀念是無所不在。
沒有留言:
張貼留言