您好,登錄后才能下訂單哦!
這篇文章主要講解了“AMM與ASMM相關知識點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“AMM與ASMM相關知識點有哪些”吧!
一、AMM相關知識:
1.從oracle 11.1開始oracle提供了通過MEMORY_TARGET參數實現自動SGA和PGA自動管理的功能,從此版本開始不再需要明確設置SGA_TARGET及PGA_AGGREGATE_TARGET,這個被支持在linux、windows、solaris、hpux、aix。
2.在使用MEMORY_TARGET參數的linux機器上,在oracle啟動時遇到ORA-00845是由于/dev/shm的大小小于memory_target所致(df -k /dev/shm),如果設置memory_max_target>memory_target,則需要確保/dev/shm至少memory_max_target
3.從11.1.0.6.0開始ASM實例默認實現自動管理SGA及PGA,(禁用ASM實例的自動內存管理,必須手動設置memory_target到0,DBCA界面將不支持此更改,這個bug被修正在11.1.0.7.0)
4.10.1版本之前shared pool在SGA中分配的大小=shared_pool_size+內部SGA的開銷,此開銷被用來維護SGA中各組件的狀態,從10.1開始shared_pool_size將包括內部SGA的開銷
5.在手動內存管理模式下,由于shared_pool_size太小不足以容納內部SGA開銷將導致ORA-00371
6.在非windows32位的操作系統上SGA_MAX_SIZE默認被設置為memory_target和memory_max_target中的最大值,在windows32操作系統上sga_max_size=60%memory_target+60%memory_max_target+25%可用虛擬地址空間
7.當lock_sga初始化參數被設置為true時將不能啟用自動內存管理
二、啟用、配置AMM:
SQL>show parameter lock_sga ------確保lock_sga為false
SQL>show parameter target ------確定當前SGA_TARGET及PGA_AGGREGATE_TARGET的值
SQL>select value from v$pgastat where name='maximum PGA allocated'; ---確定從上次啟動DB后的最大實例的PGA
memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)
為MEMORY_MAX_TARGET確定一個盡可能大的值,等于或大于SGA_TARGET
當DB使用spfile時:ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE; 當DB使用pfile時:編輯pfile設置memory_max_target = nM memory_target = mM
關閉并重啟DB
ALTER SYSTEM SET MEMORY_TARGET = nM; ALTER SYSTEM SET SGA_TARGET = 0; ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;
-------!!!如果你在pfile中設置了MEMORY_TARGET沒有設置MEMORY_MAX_TARGET,則數據庫自動設置MEMORY_MAX_TARGET值為MEMORY_TARGET的值
-------!!!如果你在pfile中設置了MEMORY_MAX_TARGET而沒有設置MEMORY_TARGET,則MEMORY_TARGET默認為0,在DB啟動后可以動態改變MEMORY_TARGET不超過MEMORY_MAX_TARGET的值
-------!!!也可以設置SGA_TARGET或PGA_AGGREGATE_TARGET為一個非0的值,這個值將作為SGA或PGA分配的最小值
三、監視、優化AMM:
SQL> select * from v$memory_target_advice order by memory_size;
-------MEMORY_SIZE_FACTOR表示假設替代的MEMORY_TARGET大小
-------ESTD_DB_TIME表示在此預計的MEMORY_TARGET大小下所需的DB time
二、ASMM相關知識:
1.SGA_MAX_SIZE設置:如果不設置則oracle在初始化的時候將選擇所有指定組件的總和或者默認值,如果設置的值比分配給所有組件的內存小,那么數據庫將忽略此設置的值
2.SGA_TARGET設置:在設置之前,同時為了啟用自動共享內存管理的功能,STATISTICS_LEVEL必須被設置為TYPICAL (the default)或ALL,如果此參數被設置那么必須設置自動調整大小的組件的大小為0或最小值
3.SGA中能自動調整大小的組件:Fixed SGA、SHARED_POOL_SIZE、LARGE_POOL_SIZE、JAVA_POOL_SIZE、DB_CACHE_SIZE、STREAMS_POOL_SIZE
4.SGA中不能自動調整(固定)大小的組件:LOG_BUFFER、DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE、DB_nK_CACHE_SIZE
5.SGA中分配內存的單位:在SGA中動態分配各組件大小的最小單元是顆粒,通常來說在多數平臺上如果SGA的大小<=1G,則顆粒大小是4M,SGA>1G,則顆粒大小為16M(32位NT上SGA>1G,則顆粒大小為8M)
6.查詢V$SGAINFO或V$SGA_DYNAMIC_COMPONENTS看顆粒的大小,如果手動給SGA中組件分配的內存不是顆粒的倍數,則DB實際給該組件分配(四舍五入到最小粒度的倍數)大于分配值為其顆粒倍數的是小值
7.SGA_MAX_SIZE不能被動態修改
三、啟用、配置ASMM:
從MSMM到ASSM:
1.獲得SGA_TARGET的值SELECT ((SELECT SUM(value) FROM V$SGA) - (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)) "SGA_TARGET" FROM DUAL;
2.修改pfile中sga_target的值并重啟DB,或者ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}]
3.通過修改pfile中各自動調優組件對應的初始化參數的值為0或最小分配量,或者alter system set %_size=0——————期望的最小值
從AMM到ASMM:
1.ALTER SYSTEM SET MEMORY_TARGET = 0
2.通過修改pfile中各自動調優組件對應的初始化參數的值為0或最小分配量,或者alter system set %_size=0-期望的最小值
---------啟用ASMM后可以動態調整相應自動調整組件的最小值,該值只限制該組件大小不能減小到此值以下,但不限制組件的最大值
---------動態設置sga_target一個非0值之前,也就是啟用ASMM之前最好重啟DB,因為共享池不能被動態收縮,因為其中含有一些打開的游標、PL/SQL包及sql的執行狀態
---------手動調整大小的組件也可以動態改變,但增加或減少的相應值都從自動調整大小組件中動態獲取或釋放,而且設置的是一個精確的值
四、監視、優化ASMM:
SQL> select * from v$sga_target_advice order by sga_size;
五、建議參考(from Yong Huang):
配置總大小時參考如下:
在現在操作系統內存比較充足的情況下,初始一般將shared pool設置為1至3G,其余的分配給buffer cache
10gASMM中db_cache_size至少2G
11g中將禁用AMM使用ASMM,因為能夠使用大的緩沖頁
感謝各位的閱讀,以上就是“AMM與ASMM相關知識點有哪些”的內容了,經過本文的學習后,相信大家對AMM與ASMM相關知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。