天天看點

oracle11g 自動記憶體管理

11g開始,能自動管理sga,pga,稱為amm

MEMORY_MAX_TARGE:這個參數指定了 MEMORY_TARGET這個參數能夠設定的最大值,memory_target這個參數指定了系統級别的可用記憶體,可以根據需要減少或增加sga,pga的大小。在一個基于文本的參數檔案中,如果排除掉 MEMORY_MAX_TARGET 參數并包含MEMORY_TARGET這個參數,那麼資料庫會動态的設定memory_max_target為memory_target,如果排除掉MEMORY_TARGET 這個參數,并包含MEMORY_MAX_TARGET這個參數,memory_target參數預設為0,啟動後,你可以設定memory_target為非0,并不超過MEMORY_MAX_TARGET的大小。

監控amm

select * from v memorytargetadviceorderbymemorysize大多數的情況下,我們是使用手工配置設定記憶體的。對于pga,設定了target大小,也是自動管理的。對于asmm,sgatarget參數指定了sga可用的大小。granulesThememoryfordynamiccomponentsintheSGAisallocatedintheunitofgranules.GranulesizeisdeterminedbytotalSGAsize.Generallyspeaking,onmostplatforms,ifthetotalSGAsizeisequaltoorlessthan1GB,thengranulesizeis4MB.ForSGAslargerthan1GB,granulesizeis16MB.Someplatformdependenciesmayarise.Forexample,on32−bitWindowsNT,thegranulesizeis8MBforSGAslargerthan1GB.Consultyouroperatingsystemspecificdocumentationformoredetails.select∗fromv sgainfo;

select * from v sgatargetadviceorderbysgasize;設定sgaSELECT((SELECTSUM(value)FROMV SGA) -

(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)

) “SGA_TARGET”

FROM DUAL;

啟用自動sga管理,但是有些部件是不能自動管理的,包括三部分:

nk buffer(非預設塊的buffer);log buffer;keep&recycle buffer;

這些非自動管理元件必須手工設定,自動配置設定的記憶體是sga_target減去這部分大小。

amm情況下轉換成asmm

1ALTER SYSTEM SET MEMORY_TARGET = 0;

2将sga各個記憶體池設定成0

SGA_TARGET 這個參數可以動态調整變大或變小。

為了使用手工管理共享記憶體,

1設定MEMORY_TARGET =0

2設定SGA_TARGET =0,并設定sga各個元件的大小。

在設定了sga_target後,依然可以設定sga各個元件的大小,保證各個元件的在動态調整的時候不低于設定的值。

如果設定了PGA_AGGREGATE_TARGET,oracle會確定所有的server process和背景程序的記憶體配置設定不會超過這個值。

<dl></dl>

<dd>SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE and CREATE_BITMAP_AREA_SIZE</dd>

If you decide to tune SQL work areas manually, you must set the WORKAREA_SIZE_POLICY initialization parameter to MANUAL.

記憶體管理視圖

在測試環境中,關閉amm,開啟asmm,自動pga管理重新開機oracle後,發現memory_max_target參數依然會有值 

使用參數檔案,在參數檔案中去掉該值,此時參數檔案中,這個值其實已經為0了,在啟動,檢視參數已被置為0。