先貼出具體步驟
開啟自動共享內存管理 ASMM
第一步:將MEMORY_MAX_TERGET和MEMORY_TARGET和設置為0
SQL> alter system set memory_max_target=0 scope=spfile;
System altered.
SQL> alter system set memory_target=0 scope=both;
System altered.
第二步:設置sga_target和pga_aggregate_target的數值
SQL> alter system set sga_target=1024m scope=both;
System altered.
SQL> alter system set pga_aggregate_target=512m scope=both;
System altered.
第三步:重啟數據庫
開啟自動內存管理 AMM
自動內存管理(Automatic Memory Management)是11G中推出的新功能,10G中只有自動SGA管理。啟用了AMM只需設置內存的大小,就可以自動的在SGA和PGA之間分配內存,省去了管理設置SGA和PGA的麻煩。
MEMORY_TARGET--操作系統的角度上 Oracle 所能使用的最大內存值。動態參數
MEMORY_MAX_TARGET--MEMORY_TARGET所能設定的最大值。非動態可調。
注意:
如果使用的是 pfile,設定了 MEMORY_TARGET 而沒有指定 MEMORY_MAX_TARGET 的值,則實例啟動后 MEMORY_MAX_TARGET 的值與 MEMORY_TARGET 相等。如果 pfile 中指定了 MEMORY_MAX_TARGET 而沒有指定 MEMORY_TARGET ,實例啟動后 MEMORY_TARGET 為 0 。
一:自動內存管理(AMM)
默認安裝的實例即是 AMM 方式。如下
SQL> show parameters 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 1216M
memory_target big integer 1216M
pga_aggregate_target big integer 0
sga_target big integer 0
要注意到 SGA_TARGET 和 都為 0 。
二:自動共享內存管理(Automatic Shared Memory Management, ASMM)
這是 10g 引入的管理方式,要使用這種方式,需要設置初始化參數 MEMORY_TARGET=0 ,然后顯式的指定 SGA_TARGET 的值。
SQL> alter system set sga_target=1024m scope=both;
alter system set sga_target=1024m scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00839: SGA_TARGET cannot be modified to the specified value
SQL> alter system set memory_target=0 scope=both;
System altered.
SQL> alter system set sga_target=1024m scope=both;
System altered.
SQL>
這兩個參數的修改是有嚴格順序的,如果不遵守倒也沒問題--Oracle 會報告錯誤。
三:手工共享內存管理
這個又更加原始了一些。因為原始,所以新的初始化參數 SGA_TARGET 與 MEMORY_TARGET 都要設置為 0. 然后手工設定 share_pool_size 、db_cache_size 等 sga 參數。要注意 RESULT_CACHE_SIZE 參數是 11g 新引入的,用來緩存 SQL 結果。
四.自動 PGA 內存管理
如果使用 AMM,則對 PGA 不用操心。如果要做到精細控制而切換到自動 PGA 內存管理模式,需要設定WORKAREA_SIZE_POLICY = AUTO(默認即為 AUTO),然后需要指定 PGA_AGGREGATE_TARGET 的值。如需要精確控制PGA,則 WORKAREA_SIZE_POLICY = MANUAL
五.手動 PGA 管理
前提是 WORKAREA_SIZE_POLICY = manual ,然后分別指定 SORT_AREA_SIZE 等 PGA 相關的參數。估計現在沒有人干這個吃力不討好的事情了。這個模式大可以忽略。
六.AMM 的限制
如果初始化參數 LOCK_SGA = true(默認false) ,則 AMM 是不可用的。
下面來看看在11g 中Memory_target 設置和不設置對SGA/PGA 的影響:
如果Memory_target 設置為非0 值
1、sga_target 和 pga_aggregate_target 已經設置大小
Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和 memory_max_size 一致
2、sga_target 設置大小, pga_aggregate_target 沒有設置大小
pga_aggregate_target初始化值=memory_target-sga_target
3、sga_target 沒有設置大小, pga_aggregate_target 設置大小
sga_target 初始化值=memory_target-pga_aggregate_target
4、sga_target 和 pga_aggregate_target 都沒有設置大小
兩個值沒有最小值和默認值,Oracle 將根據數據庫運行狀況進行分配大小,但在數據庫啟動是會有一個固定比例來分配:
sga_target =memory_target *60%
pga_aggregate_target=memory_target *40%
如果Memory_target 設置為0
11g 中默認為0 則初始狀態下取消了Memory_target 的作用,完全和10g 在內存管理上一致,完全向下兼容。
1、SGA_TARGET設置值
自動調節SGA 中的shared pool,buffer cache,redo log buffer,java pool,larger pool等內存空間的大小。PGA 則依賴pga_aggregate_target 的大小。
2、SGA_target 和PGA_AGGREGATE_TARGET 都沒有設置
SGA 中的各組件大小都要明確設定,不能自動調整各組件大小。PGA不能自動增長和收縮
3: MEMORY_MAX_TARGET 設置而MEMORY_TARGET =0 這種情況先和10g 一樣。
實驗:關閉內存自動管理,設置SGA,PGA分別自動管理,SGA=500,PGA=200
[root@hong ~]# su - oracle
[oracle@hong ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Sep 15 02:39:35 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 939495424 bytes
Fixed Size 2258840 bytes
Variable Size 595593320 bytes
Database Buffers 335544320 bytes
Redo Buffers 6098944 bytes
Database mounted.
Database opened.
SQL> show parameter sga_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 0
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0
SQL> alter system set sga_target=500M scope=spfile;
System altered.
SQL> alter system set pga_aggregate_target=200M scope=spfile;
System altered.
SQL> alter system set memory_target=0 scope=spfile;
System altered.
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 0
memory_target big integer 0
parallel_servers_target integer 16
pga_aggregate_target big integer 200M
sga_target big integer 500M
((((((上述三個參數sga_target,pga_aggregate_target,memory_target,相互影響他們的參數值,所以更改此類參數需加scope=spfile,不加默認scope=both,但是查看參數值時並未生效<span "="">;啟動內存SGA,PGA分別自動管理,順序為:alter system set sga_target=500m scope=spfile;alter system set pga_aggregate_target=200m scope=spfile; alter system set memory_target=0 scope=spfile;)))))
——重置內存自動管理memory_target:
SQL> alter system set memory_target=900M scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 939495424 bytes
Fixed Size 2258840 bytes
Variable Size 671090792 bytes
Database Buffers 260046848 bytes
Redo Buffers 6098944 bytes
Database mounted.
Database opened.
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 900M
memory_target big integer 900M
parallel_servers_target integer 16
pga_aggregate_target big integer 200M
sga_target big integer 500M
SQL> alter system set pga_aggregate_target=175M;
System altered.
SQL> alter system set sga_target=300M;
System altered.
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 900M
memory_target big integer 900M
parallel_servers_target integer 16
pga_aggregate_target big integer 175M
sga_target big integer 300M
SQL>
(內存自動管理生效,只要memory_target有值就以它為准)
