Oracle內存管理方式由amm切換為asmm


(一)ASMM和AMM

在Oracle 10g時,Orale推出ASMM(Automatic Shared Memory Managed),實現了SGA和PGA各自內部的自調節。在Oracle 11g,又推出了AMM(Automatic Memory managed),實現了SGA和PGA的統籌管理。
在Linux平台中,還是比較建議使用ASMM,因為Linux啟用hugepage特性需要使用ASMM,而不能使用AMM。見
https://docs.oracle.com/cd/E11882_01/server.112/e10839/appi_vlm.htm#UNXAR391
因此,需要將ASMM調整為AMM,需要調整的參數有:
1.刪除memory_max_target、memory_target
2.將sga_max_size、sga_target、pga_aggregate_target設置為非0值,其中sga_target要小於或等於sga_max_size。

 

(二)一次將AMM轉換為ASMM的記錄

初始參數:

 

在修改參數之前,要備份spfile為pfile(建議在修改Oracle的參數時,均要備份spfile)

SQL> create pfile='/home/oracle/orcl_20180502.pfile' from spfile;

 

改參數:

SQL> alter system set memory_max_target=0 scope=spfile;
SQL> alter system set memory_target=0 scope =spfile;
SQL> alter system set sga_max_size=700M scope=spfile;
SQL> alter system set sga_target=700M scope=spfile;
SQL> alter system set pga_aggregate_target=100M scope=spfile;

改完參數,再次對spfile進行備份,為什么要備份,且看后面

SQL> create pfile='/home/oracle/20180502_orcl.pfile.bak' from spfile;

重啟數據庫,使修改的參數生效:

 

發現數據庫無法重啟,提示SGA_TARGET的值應該小於MEMORY_MAX_TARGET。很明顯,在修改了之后,sga_target=700M,而memory_max_target=0。這個問題的原因是Oracle啟動過程中對於參數的內部檢查。因為MEMORY_MAX_TARGET被“顯式”的賦值,與SGA_TARGET賦值相沖突。

解決辦法是,將備份的pfile文件中的memory_max_target和memory_target刪除。

[oracle@redhat6 ~]$ vim 20180502_orcl.pfile.bak

 

刪除黃色的2行。

然后使用pfile啟動數據庫

 

再利用pfile重建spfile

 

檢查參數:

 

 修改成功,至此 AMM轉換為ASMM成功。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM