關於ASMM和AMM
http://blog.itpub.net/29800581/viewspace-1263875/
http://blog.csdn.net/deanza/article/details/9635461
現在的Oracle正在往智慧化方向發展。如果我們現在找一些8i/9i時代的Oracle書籍,怎麼樣配置合適的資料庫各記憶體池大小是非常重要的話題。但是進入10g之後,自動記憶體池調節成為一個重要Oracle特性。 在10g時,Oracle推出了ASMM(Automatic Shared Memory Management),實現了Oracle SGA和PGA內部結構的自調節。進入11g之後,AMM(Automatic Memory Management)實現了引數MEMORY_TARGET,將SGA和PGA的規劃全部統籌起來對待。 預設情況下,Oracle 11g是使用AMM的。我們在安裝過程中,指定Oracle使用記憶體的百分比,這個取值就作為MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果這兩個引數設定為非零取值,那麼Oracle就是採用AMM管理策略的。 同時,如果我們設定這兩個引數為0,則AMM自動關閉。對應的SGA_TARGET、PGA_AGGREGATE_TARGET引數取值非零之後,Oracle自動退化使用ASMM特性。
昨天花了些時間總算搞懂了oracle10g中的ASMM和oracle11g中的AMM。下面是總結:
在oracle9i引入了引數pga_aggregate_target對pga進行調整,需要將workarea_size_policy設定為auto才可開啟。
在oracle10g中又引入了一個新的引數sga_target來對sga進行自動調整。
在oracle10g之前,sga的各個記憶體區的大小都需要透過各自的引數指定,並且無法超過引數指定的值,儘管他們之和可能
並沒有達到sga的最大限制。此外,一旦分配後,各個區記憶體只能給本區使用,相互之間是不能共享的。拿sga中最重要的兩個記憶體區BUFFER CACHE和SHARED POOL來說,它們兩個對例項效能影響最大,但是就有這樣的矛盾存在:
在記憶體資源有限的情況下,某些時候資料對cache的需求非常大,為了提高buffer hit,就需要增加buffer cache ,但由於sga有限,只能從其他區“搶”過來---如縮小shared pool,增加buffer cache;而有時又有大塊的plsql程式碼被解析注入記憶體中,導致shared pool不足,又需要擴大shared pool,這時可能又需要人為干預,從buffer cache中將記憶體奪回來。,有了
sga_target這個新特性之後,sga中的這種矛盾就迎刃而解了,這一特性被稱為自動共享記憶體管理Automatic Shared Memory Management(ASMM),有了這個引數之後就不需要為每個記憶體區指定大小了,sga中各個記憶體區大小由orale自行控制,不需要人為指定。oracle可以隨時調整各個區域的大小,使之達到系統效能最佳狀態的合理大小。當我們啟用了oracle的ASMM之後,也不是sga中所有區的大小都開始動態起來,只有以下這些區的記憶體大小動態共享起來:
buffer cache(db_cache_sizee)
shared pool(shared_pool_size)
large pool(large_pool_size)
java pool(java_pool_size)
streams pool(streams_pool_size)
而sga中其他區域的記憶體大小仍然是固定不共享的,如果需要使用需要配置對應的引數。
在oracle11g中又引入了一個全新的引數--memory_target對sga和pga同時進行調整,有了這個引數就可以對oracle的所有記憶體進行自動調整。
下面來講講ASMM和AMM:
在oracle10g中有自動共享記憶體管理Automatic Shared Memory Management(ASMM),決定資料庫是否是自動共享記憶體管理的引數有兩個:
sga_target和lock_sga。只有當sga_target為非零時才是ASMM,而只有lock_sga=false時ASMM才可用。
在oracle11g中又引入了一個新的技術--自動記憶體管理Automatic Memory Management(AMM),這個技術可以自動管理oracle的所有記憶體,包括
sga和pga。決定資料庫是否是自動記憶體管理的引數也有兩個:memory_target和lock_sga。只有當memory_target為非零時才是AMM,而只有
lock_sga=false時AMM才可用。
下面用oracle11g來看看這幾個引數:
SYS@orcl 03-SEP-14>show parameter memory_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_target big integer 812M
下面我們檢視sga_target和pga_aggregate_target的值:
select a.ksppinm name,b.ksppstvl value
from x$ksppi a,x$ksppcv b
where a.indx=b.indx
and
a.ksppinm like '%sga_target%';
NAME VALUE
--------------------------------------------------------------------------------
sga_target 0
__sga_target 507510784
select a.ksppinm name,b.ksppstvl value
from x$ksppi a,x$ksppcv b
where a.indx=b.indx
and
a.ksppinm like '%pga_aggregate_target%';
NAME VALUE
--------------------------------------------------------------------------------
pga_aggregate_target 0
__pga_aggregate_target 343932928
我們把得到的sga_target和pga_aggregate_target的值相加:
select (507510784+343932928)/1024/1024 from dual;
(5075
-----
812MB
還有一點要注意的,如果oracle使用了ASMM或者AMM,那麼當我們用show parameter shared_pool_size(db_cache_size,large_pool_size,
streams_pool_size)顯示的結果都為零,也就是說只有當我們使用手動記憶體管理時,以上才會顯示非零值,那麼我們如何在oracle使用
AMM或者ASMM時查詢這些引數的值呢?可以透過檢視v$sga_dynamic_components:
select component,current_size
from v$sga_dynamic_components;
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool 234881024
large pool 4194304
java pool 4194304
streams pool 0
DEFAULT buffer cache 255852544
KEEP buffer cache 0
RECYCLE buffer cache 0
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
DEFAULT 32K buffer cache 0
Shared IO Pool 0
ASM Buffer Cache 0
14 rows selected.
================補充====================
記憶體管理-AMM與ASMM
參見官方文件:
Oralce記憶體的自動管理- AMM與ASMM
AMM表示SGA,PGA等都會自動管理。
MMM表示SGA,PGA需要手動設定,但SGA又分為MSMM和ASMM。
自動記憶體管理(AMM),包含SGA,PGA。
自動共享記憶體管理(ASMM),包含SGA中的1 cache和4 pool。
注意以下幾個關鍵字的引數的構成。
SGA_TARGET SGA_MAX_SIZE
MEMORY_TARGET MEMORY_MAX_SIZE
pga_aggregate_target
db_cache_size
shared_pool_size java_pool_size large_pool_size streams_pool_size
另外注意這幾個引數
LOG_BUFFER
DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE
DB_nK_CACHE_SIZE
ASMM指的是SGA中的1個cache,4和pool(db_cache_size,shared_pool_size java_pool_size large_pool_size streams_pool_size)的管理。
SGA中的下面3項不接受ASMM管理,即LOG_BUFFER,DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE,DB_nK_CACHE_SIZE。
修改前記憶體引數配置為AMM
SQL> select * from v$sgainfo;
NAME BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size 2228440 No
Redo Buffers 3637248 No
Buffer Cache Size 171966464 Yes
Shared Pool Size 146800640 Yes
Large Pool Size 4194304 Yes
Pool Size 4194304 Yes
Streams Pool Size 0 Yes
Shared IO Pool Size 0 Yes
Granule Size 4194304 No
Maximum SGA Size 559517696 No
Startup overhead in Shared Pool 67108864 No
NAME BYTES RES
-------------------------------- ---------- ---
Free SGA Memory Available 226492416
12 rows selected.
SQL> set linesize 200
SQL> set pagesize 100
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 536M
sga_target big integer 0
SQL> show parameter memory
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 536M
memory_target big integer 536M
shared_memory_address integer 0
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0
SQL> show parameter buffer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
buffer_pool_recycle string
db_block_buffers integer 0
log_buffer integer 3424256
use_indirect_data_buffers boolean FALSE
SQL> show parameter pool
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
buffer_pool_recycle string
global_context_pool_size string
java_pool_size big integer 0
large_pool_size big integer 0
olap_page_pool_size big integer 0
shared_pool_reserved_size big integer 7M
shared_pool_size big integer 0
streams_pool_size big integer 0
SQL> show parameter cache
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
db_cache_advice string ON
db_cache_size big integer 0
db_flash_cache_file string
db_flash_cache_size big integer 0
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0
object_cache_max_size_percent integer 10
object_cache_optimal_size integer 102400
result_cache_max_result integer 5
result_cache_max_size big integer 1376K
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
session_cached_cursors integer 50
SQL> select * from v$sga_target_advice;
SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
160 .5 51 1.0536 8732
240 .75 48 1 8676
320 1 48 1 8676
400 1.25 48 1 8676
480 1.5 48 1 8676
560 1.75 48 1 8676
640 2 48 1 8676
7 rows selected.
AMM->MMM+ASMM引數修改(修改先memory_target的引數為0,再給sga_target設一個值,如果不設定,系統會把當前自動的sga值設定為sga_target)
SQL> select * from v$sga_target_advice;
SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
160 .5 73 1.45 13760
240 .75 50 1 10098
320 1 50 1 10084
400 1.25 50 1 10084
480 1.5 50 1 10084
560 1.75 50 1 10084
640 2 50 1 10084
7 rows selected.
SQL> alter system set memory_target=0;
System altered.
SQL> alter system set sga_target=320M scope=both;
System altered.
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 536M
sga_target big integer 320M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 536M
memory_target big integer 0
shared_memory_address integer 0
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 216M
SQL> shutdown immediate
SQL> startup
instance started.
Total System Global Area 334036992 bytes
Fixed Size 2226272 bytes
Variable Size 155191200 bytes
Database Buffers 171966464 bytes
Redo Buffers 4653056 bytes
Database mounted.
Database opened.
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 320M
sga_target big integer 320M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 216M
MMM+ASMM->AMM修改引數
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 320M
sga_target big integer 320M
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 216M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL> alter system set memory_target=536M scope=spfile;
SQL> alter system set sga_target=0;--如果不改為0,如果改為大於320M的值,啟動時會memory_target報錯,建議改為0。
SQL> shutdown immediate;
SQL> startup;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2137469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASMM和AMMOracleASM
- AMM與ASMMASM
- Oracle的AMM和ASMM以及相關引數探究OracleASM
- Oracle 11g AMM與ASMM切換OracleASM
- 【AMM】關於ASM中AMM引數說明ASM
- ORACLE AMM 、ASMM 、自動記憶體管理(官方手冊)OracleASM記憶體
- 【AMM】關於資料庫例項AMM引數說明資料庫
- 有關ASM和ASMM的理解ASM
- OracleASM關閉AMM,開啟ASMM,修改引數後報ORA-00843 ORA-00849OracleASM
- asmm , assmASMSSM
- 11g AMM和/dev/shmdev
- ASMM/AMM開啟時動態調整記憶體元件(shared_pool_size, db_cache_size等)大小ASM記憶體元件
- 一點ASMM總結ASM
- ASMM自動管理的功能ASM
- 關於PR 和PO關係
- 關於Session和CookieSessionCookie
- 關於BOOT和DUMPboot
- 關於informix和oracleORMOracle
- oracle中關於in和exists,not in 和 not existsOracle
- 關於Byte和bit
- mysql 關於exists 和in分析MySql
- 關於【s】和[t]字元字元
- 關於JSP和HTMLJSHTML
- 關於conftest和fixtures
- 關於真實和真心
- 關於零值和nil
- 關於imp和exp的有關理解
- 關於表空間和表的關係
- 關於Fork和Malloc的思考
- git關於origin和masterGitAST
- 關於Cookie、session和Web StorageCookieSessionWeb
- 關於NoClassDefFoundError和ClassNotFoundException異常ErrorException
- 關於C++、PHP和SwooleC++PHP
- 關於Platform SDK和Windows SDKPlatformWindows
- 關於mongodb和搜尋引擎??MongoDB
- 關於EJB和普通java物件Java物件
- 關於GetClientRect 和 GetWindowRectclient
- 關於高水位線和deletedelete