Oracle11g自動記憶體管理(AMM)相關的初始化引數

bitifi發表於2015-10-08
    ORACLE對記憶體的管理越來越趨向智慧化、自動化,從9i透過PGA_AGGREGATE_TARGET引數實現PGA的自動管理,10g透過Automatic Shared Memory Management(ASMM)實現SGA的自動管理,到11g透過Automatic Memory Management(AMM)實現記憶體(SGA+PGA)的自動管理。由於11G(AMM)的引入,DBA只需要設定一個或兩個引數就可以實現ORACLE對整個記憶體塊的自動管理。memory_max_target引數指定了ORACLE可以分配的最大記憶體大小,如果不指定memory_target引數,預設為0,即和memory_max_target同樣大小。    
    預設情況下,Oracle 11g是使用AMM的。我們在安裝過程中,指定Oracle使用記憶體的百分比,這個取值就作為MEMORY_TARGETMEMORY_MAX_TARGET的初始取值使用。如果這兩個引數設定為非零取值,那麼Oracle就是採用AMM管理策略的。同時,如果我們設定這兩個引數為0,則AMM自動關閉。對應的SGA_TARGETPGA_AGGREGATE_TARGET引數取值非零之後,Oracle自動退化使用ASMM特性。

    下面介紹一下4個相關的初始化引數。
 

SGA_MAX_SIZE

 

屬性

描述

引數型別

Big integer

語法

SGA_MAX_SIZE = integer [K | M | G]

預設值

資料庫啟動時SGA的初始化大小,取決於SGA中不同池的大小,例如緩衝區,共享池,大池,等等。

是否可修改

取值範圍

0~視作業系統而定

SGA_MAX_SIZE指定了例項生命週期內SGA的最大值。

64位平臺或者非32Windows平臺,當MEMORY_TARGETMEMORY_MAX_TARGET被設定時,SGA_MAX_SIZE會被設定為二者的較大值。這樣將會預留更多的地址空間用於擴大SGA

32Windows平臺,SGA_MAX_SIZE的預設值是下面幾個引數值的最大值:

l  60%*MEMORY_TARGET(如果指定的話)

l  60%*MEMORY_MAX_TARGET (如果指定的話)

l  25%*總的可用虛擬地址空間

 

SGA_TARGET

 

屬性

描述

引數型別

Big integer

語法

SGA_TARGET = integer [K | M | G]

預設值

0(SGA自動調整功能在DEFERRED模式調整請求下被禁用,但是在IMMEDIATE模式調整請求下是允許的)

是否可修改

ALTER SYSTEM

取值範圍

64M~視作業系統而定

是否基本引數

SGA_TARGET制定了SGA各個元件的總大小。如果SGA_TARGET被指定,那麼下面所列出的記憶體池大小將被自動分配:

l  Buffer cache (DB_CACHE_SIZE)

l  Shared pool (SHARED_POOL_SIZE)

l  Large pool (LARGE_POOL_SIZE)

l  Java pool (JAVA_POOL_SIZE)

l  Streams pool (STREAMS_POOL_SIZE)

如果上述自動調整的記憶體池被設定為非零值,那麼這些值將被自動共享記憶體管理系統(ASMM, Automatic Shared Memory Management)視為最小值。如果一個應用元件正常執行要求一個最小數值的記憶體,那麼你就需要設定最小值。

下述記憶體池需要手工設定大小,不受自動共享記憶體管理系統(ASMM, Automatic Shared Memory Management)的影響:

l  Log buffer

l  Other buffer caches, such as KEEP, RECYCLE, and other block sizes

l  Fixed SGA and other internal allocations

當自動共享記憶體管理系統在計算自動調整記憶體池的具體大小時,會將上述記憶體池記憶體從總的可用SGA_TARGET中扣除。

在“預設值”欄位中,IMMEDIATE模式自動調整要求是必要的,這樣可以避免ORA-04031錯誤。DEFERREDIMMEDIATE模式的具體值,可以透過V$MEMORY_RESIZE_OPS檢視的OPER_MODE列來檢視。

 

MEMORY_MAX_TARGET

 

屬性

描述

引數型別

Big integer

語法

MEMORY _MAX_TARGET = integer [K | M | G]

預設值

0

是否可修改

NO

取值範圍

0~Oracle資料庫可用實體記憶體大小

是否基本引數

MEMORY_MAX_TARGET指定了一個DBA可以設定MEMORY_TARGET初始化引數的最大值。請參見MEMORY_TARGET的有關描述,獲取更多有關MEMORY_MAX_TARGETMEMORY_TARGET的設定是如何相互影響的資訊。

 

MEMORY_TARGET

 

屬性

描述

引數型別

Big integer

語法

MEMORY _TARGET = integer [K | M | G]

預設值

0(SGA自動調整功能在DEFERRED模式調整請求下被禁用,但是在IMMEDIATE模式調整請求下是允許的)

是否可修改

ALTER SYSTEM

取值範圍

152M~視作業系統而定

是否基本引數

MEMORY_TARGET指定Oracle系統範圍的可用記憶體。資料庫將記憶體大小調整為MEMORY_TARGET的值,根據需要減少或擴大SGAPGA

MEMORY_TARGET應該設定大於或等於當前SGAPGA大小的總和。

在文字初始化引數檔案中,如果省略MEMORY_MAX_TARGET幷包括一個MEMORY_TARGET值,則資料庫會自動將MEMORY_MAX_TARGET的值設定為MEMORY_TARGET的值。如果省略MEMORY_TARGET幷包括MEMORY_MAX_TARGET,則MEMORY_TARGET引數預設值為零。在資料庫啟動後,你可以動態地修改MEMORY_TARGET為非零值,只要它不超過MEMORY_MAX_TARGET的值。

總的記憶體使用量可以超過MEMORY_TARGET的值。例如,只要在作業系統級別上有可用記憶體,無論MEMORY_TARGET的值是多少,都可以將記憶體分配給PL / SQL表和可變陣列。

在“預設值”欄位中,IMMEDIATE模式自動調整要求是必要的,這樣可以避免ORA-04031錯誤。DEFERRED和IMMEDIATE模式的具體值,可以透過V$MEMORY_RESIZE_OPS檢視的OPER_MODE列來檢視。



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

相關文章