Oracle 記憶體結構(一)

Nalternative發表於2011-02-17

Oracle 在記憶體中儲存以下資訊:

1、程式程式碼

2、已連線的會話(session)資訊,包括當前活動的(active)及非活動的會話

3、程式執行過程中所需的資訊(例如,某個查詢的狀態)

4、需要在 Oracle 程式間共享並進行通訊的資訊(例如,鎖資訊)

5、資料檔案內資料的快取(例如,資料塊(data block)及重做日誌條目(redo log entry))

 

Oracle 中的基本記憶體結構包括:

系統全域性區(System Global AreaSGA),此區域由所有的服務程式(server process)和後臺程式(background process)共享。

程式全域性區(Program Global AreasPGA),此區域是每個服務程式和後臺程式所私有的;即每個程式都有一個 屬於自己的 PGA

   

    軟體程式碼區(software code area)。


1 、初始化引數 SGA_MAX_SIZE

SGA 中包含了多個記憶體元件component),每一元件都可以被看作為一個記憶體池,用於滿足特定型別的記憶體分配請求。

所有 SGA 元件都是以預設的粒度(granule)為單位進行記憶體的分配與回收的。Oracle 資料庫通過記錄每個 SGA 元件使用的粒度單位的數量來掌握整個 SGA 的記憶體使用情況。

粒度單位的大小是由整個 SGA 的容量決定的。在大多數平臺下,當 SGA 的容量小於 1GB 時,一個粒度單位為 4MB;當 SGA 的容量大於 1GB 時,一個粒度單位則為 16MB。但也有些平臺例外。

A 所使用記憶體的上限由 SGA_MAX_SIZE 初始化引數決定。在例項初始化時,如果初始化引數檔案(initialization parameter file)或伺服器引數檔案(server parameter file)中 SGA_MAX_SIZE 的值小於 Oracle SGA 各元件分配的記憶體之和,Oracle 將忽略 SGA_MAX_SIZE 引數。

為了優化系統效能,整個 SGA 的容量應與實際記憶體數量相符。如果因 SGA 過大而需要使用虛擬記憶體(virtual memory)時,資料庫的系統效能將顯著下降。


2 、共享全域性區自動管理

Oracle 10g 中,DBA 只需使用 SGA_TARGET 引數指定例項可用的 SGA 總量即可,Oracle 能夠自動地將記憶體分配給 SGA 的各個子元件,以便提高記憶體的使用效率。

SGA_TARGET 引數涵蓋了 SGA 的全部記憶體,不要動態地設定 SGA_TARGET 引數。這個引數只能在資料庫啟動時設定。

少量的 SGA 記憶體元件容量是不能自動調整的。當應用需要時,DBA 要顯式地設定這些元件的容量。這樣的記憶體元件有:

保留/回收快取區(Keep/Recycle buffer cache)(由 DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE 引數控制)

非標準容量資料塊使用的快取(由 DB_nK_CACHE_SIZEn = {2481632} 引數控制)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25323853/viewspace-687415/,如需轉載,請註明出處,否則將追究法律責任。

相關文章