開啟oracle記憶體自動化管理
開啟oracle記憶體自動化管理
oracle11g在大的改進之一,是在oracle例項的記憶體管理方面。oracle11g中的新的記憶體管理特性自動化記憶體管理(automatic memory management)。在該新特性之下SGA與PGA將會根據需要自動的擴展與收縮。你只需要設定兩個記憶體管理相關的引數memory_target與memory_max_target.
memory_target:該引數設定整個oracle資料庫例項可以使用的記憶體量,oralce資料庫例項在執行過程中會根據需求自動的調節SGA與PGA的大小。可以使用相應的alter system命令動態的修改memory_target的值。該引數是動態初始化引數。
memory_max_target:該引數設定oracle例項可以使用的最大記憶體量。在調整memory_target的值時必須保持以下的約束關係memory_target<=memory_max_target.該引數是靜態初始化引數。
在建立資料庫的時候,你可以透過設定memory_target,memory_max_target初始化引數來開啟自動化記憶體管理特性。在資料庫建立以後也可以透過設定memory_target,memory_max_target初始化引數來開啟自動化記憶體管理,但是不會立即生效,需要重啟例項。如果你不想設定SGA與PGA的最小值,可以把sga_target與pag_aggregate_target初始化引數都設定為0。
確定memory_target值的大小。
memory_target = sga_target + max(pga_aggregate_target, maximum pga allocated)
SQL> show parameter pga_aggregate_target;
NAME TYPE VALUE
------------------------------------ ----------- -----------------------
pga_aggregate_target big integer 100M
可見pga_aggregate_target=100M。
確定oracle例項啟動以來PGA的最大容量。
SQL> select value/1024/1024 as value from v$pgastat
2 where name='maximum PGA allocated';
VALUE
----------
50.5244141
由查詢可知自例項啟動以來,分配給PGA的最大記憶體空間約是51MB。
確定例項的sga_target的大小。
SQL> select (
2 (select sum(value) from v$sga) -
3 (select current_size from v$sga_dynamic_free_memory)
4 ) "sga_target"
5 from dual;
sga_target
----------
313860096
由查詢可知當前oracle例項的SGA大小是300MB。
memory_target=SGA+pga_aggregate_target
memory_target=352MB
當前確定是memory_target不一定是最合適,這裡沒有調優的步驟,只是為了轉換到自動化記憶體管理。如果你的機器還有實體記憶體,可以把memory_target的值設定的大一些。
確定memory_max_target的值,即確定分配給oracle資料庫的最大記憶體量,該值可是等於或者大於memory_target,為了減少不必要的麻煩,應該為將來memory_target大小的調整留有空間,所有一般設定memory_max_target>memory_target。我這裡設定memory_max_target的值為400MB.
將memory_max_target初始化引數寫入spfile中。
SQL> alter system set memory_max_target=400M scope=spfile;
System altered.
scope必須是spfile,因為memory_max_target不是動態初始化引數。
如果是使用pfile來啟動資料庫的,選擇手動編輯該檔案,設定這些引數。
memory_max_target =400M
memory_target =352M
如果在pfile中忽略memory_max_target引數,memory_max_target的值將會自動的等於memory_target
的值。如果在pfile中忽略memory_target引數,只包括了memory_max_target引數,那麼memory_target將會預設設定為0.你可以在例項啟動以後,動態修改,但是該值不能超出memory_max_target
的值。
關閉並重啟例項
檢視剛才設定的memory_max_target的值
SQL> show parameter memory_max_target
NAME TYPE VALUE
------------------------------------ ----------- ---------
memory_max_target big integer 400M
修改memory_target的值
SQL> show parameter target
NAME TYPE VALUE
------------------------------------ ----------- -----------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 400M
memory_target big integer 0
parallel_servers_target integer 8
pga_aggregate_target big integer 100M
sga_target big integer 0
SQL> select value/1024/1024 as value from v$pgastat
2 where name='maximum PGA allocated';
VALUE
----------
45.7822266
可見pga_aggregate_target=46M,確定oracle例項啟動以來PGA的最大容量。
SQL> SELECT (
2 (SELECT SUM(value) FROM V$SGA) -
3 (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
4 ) "SGA_TARGET"
5 FROM DUAL;
SGA_TARGET
----------
313626624
可見SGA_target的大小為300M,如果馬上就修改memory_target=352M會報
值的範圍不合法的提示,修改PGA的值為0M也會報錯的。
##################################################################
SQL> alter system set memory_target=352M;
alter system set memory_target=352M
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least
400M
因為要滿足memory_target>=ppga_aggregate_target+sga_target.
但是pga_aggregate_target 的值是100M,而SGA_target的值為300M。
352M<300M+100M所有出錯了。
###################################################################
###################################################################
SQL> alter system set pga_aggregate_target=0;
alter system set pga_aggregate_target=0
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00093: pga_aggregate_target must be between 10M and 4096G-1
如果直接修改pga_aggregate_target的值會報上面的錯誤。因為我們還沒有
設定momory_target的值,如果直接是設定PGA的大小為0M的話,那不是等於不給
PGA分配記憶體嘛,所有我們透過上面的一個查詢,確定自例項啟動以來分配給
PGA的最大記憶體大小46M,先把PGA的值調下來。使
memory_target>=pga_aggregate_target+sga_target.即
352M>=50M+300M
####################################################################
SQL> alter system set pga_aggregate_target=50M;
System altered.
SQL> alter system set memory_target=352M;
System altered.
SQL> alter system set pga_aggregate_target=0M;
System altered.
這是我們已經啟用oracle的記憶體自動化管理,並且設定SGA_target與
pga_aggregate_target引數的值為0。oracle這時就不會為SGA與PGA分配最小
記憶體大小了。oracle會更加工作負載自動的調整SGA與PGA的大小。
下面檢視最終的記憶體分配結果。
SQL> show parameter target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 400M
memory_target big integer 352M
parallel_servers_target integer 8
pga_aggregate_target big integer 0
sga_target big integer 0
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-716944/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- Oracle 記憶體自動管理--關閉自動管理Oracle記憶體
- oracle的自動記憶體管理Oracle記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- 自動記憶體管理記憶體
- 將手動記憶體管理變為自動管理記憶體 ORACLE 11G記憶體Oracle
- oracle 11g自動記憶體管理Oracle記憶體
- 2 Day DBA-管理Oracle例項-管理記憶體-修改記憶體設定-自動記憶體管理Oracle記憶體
- oracle 10g 自動共享記憶體管理Oracle 10g記憶體
- 記憶體自動管理與手動管理記憶體
- ORACLE AMM 、ASMM 、自動記憶體管理(官方手冊)OracleASM記憶體
- oracle 11G 自動記憶體管理設定Oracle記憶體
- Oracle9i 自動管理PGA記憶體(zt)Oracle記憶體
- oracle 11g 自動記憶體管理(其三)Oracle記憶體
- Unix/Linux 系統自動化管理: 記憶體管理篇Linux記憶體
- JVM學習-自動記憶體管理JVM記憶體
- JVM學習筆記——自動記憶體管理JVM筆記記憶體
- JVM自動記憶體管理機制 二JVM記憶體
- Oracle 記憶體管理Oracle記憶體
- Oracle11g自動記憶體管理(AMM)相關的初始化引數Oracle記憶體
- oracle 11G 自動記憶體管理設定修改為手功管理Oracle記憶體
- 動態記憶體管理記憶體
- 10g、11g記憶體自動管理記憶體
- Oracle 記憶體管理方式Oracle記憶體
- 記憶體管理 記憶體管理概述記憶體
- 2 Day DBA-管理Oracle例項-管理記憶體-關於記憶體管理Oracle記憶體
- golang手動管理記憶體Golang記憶體
- ASMM (Auto Shared Memory Manangement) 自動共享記憶體管理ASMNaN記憶體
- 解析Java物件引用與JVM自動記憶體管理(轉)Java物件JVM記憶體
- ORACLE記憶體管理 之一 ORACLE PGAOracle記憶體
- 如何基於pfile啟動oracle11g全自動記憶體管理與memory_max_target及memory_targetOracle記憶體
- oracle開機自啟動Oracle
- ORACLE 記憶體管理 之四 SGAOracle記憶體
- oracle記憶體結構與管理Oracle記憶體
- JNI記憶體管理及優化記憶體優化
- 記憶體管理篇——實體記憶體的管理記憶體
- JVM 自動記憶體管理機制及 GC 演算法JVM記憶體GC演算法