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。