自動sga內存管理
在Oracle 10g中,與內存相關的參數可以歸爲兩類:
a 自動調優的SGA參數:目前這些參數包括DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE和JAVA_POOL_SIZE。
b 手動SGA 參數:這些參數包括LOG_BUFFER、STREAMS_POOL、DB_NK_CACHE_SIZE、DB_KEEP_CACHE_SIZE 和
DB_RECYCLE_CACHE_SIZE。
SYS@orcl>select name,bytes/1024/1024,resizeable from v$sgainfo;
NAME BYTES/1024/1024 RESIZE
--------------------------------------------- --------------- ------
Fixed SGA Size 1.16254425 No
Redo Buffers 2.8359375 No
Buffer Cache Size 172 Yes
Shared Pool Size 88 Yes
Large Pool Size 4 Yes
Java Pool Size 4 Yes
Streams Pool Size 0 Yes
Granule Size 4 No
Maximum SGA Size 272 No
Startup overhead in Shared Pool 36 No
Free SGA Memory Available 0
SYS@orcl>select component,current_size,min_size,max_size,last_oper_time from v$sga_dynamic_components;
COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE LAST_OPER_TIME
------------------------- ------------ ---------- ---------- --------------------
shared pool 96468992 92274688 0 2012-03-23 13:26:38
large pool 4194304 4194304 0
java pool 8388608 4194304 0 2012-03-23 14:02:29
streams pool 0 0 0
DEFAULT buffer cache 159383552 159383552 0 2012-03-23 14:02:29
KEEP buffer cache 4194304 0 0 2012-03-23 13:32:57
RECYCLE buffer cache 4194304 4194304 0
DEFAULT 2K buffer cache 0 0 0
DEFAULT 4K buffer cache 0 0 0
DEFAULT 8K buffer cache 0 0 0
DEFAULT 16K buffer cache 4194304 4194304 0
DEFAULT 32K buffer cache 0 0 0
ASM Buffer Cache 0 0 0
注意 :要使用自動SGA內存管理,參數STATISTICS_LEVEL必須設置爲TYPICAL或ALL。如果不支持統計集合,數據庫就沒有必要的歷史信息來確定大小。
採用自動SGA 內存管理時,確定自動調整組件大小的主要參數是SGA_TARGET,這個參數可以在數據庫啓動並運行時動態調整,
最大可以達到SGA_MAX_SIZE參數設置的值(默認等於SGA_TARGET,所以如果想增加SGA_TARGET,就必須在啓動數據庫實例之前
先把SGA_MAX_SIZE設置得大一些)。數據庫會使用SGA_TARGET值,再減去其他手動設置組件的大小(如DB_KEEP_CACHE_SIZE、
DB_RECYCLE_CACHE_SIZE等),並使用計算得到的內存量來設置默認緩衝區池、共享池、大池和Java池的大小。在運行時,實例會根
據需要動態地對這4個內存區分配和撤銷內存。如果共享池內存用光了,實例不會向用戶返回一個ORA-04031“Unable to allocate N bytes of
shared memory”(無法分配N字節的共享內存)錯誤,而是會把緩衝區緩存縮小几MB(一個顆粒的大小),再相應地增加共享池的大小。
隨着時間的推移,當實例的內存需求越來越確定時,各個SGA組件的大小也越來越固定。即便數據庫關閉後又啓動,數據庫還能記得組件的大小,因此不必每次都從頭再來確定實例的正確大小。這是通過4 個帶雙下劃線的參數做到的:__DB_CACHE_SIZE、
__JAVA_POOL_SIZE、__LARGE_POOL_SIZE和__SHARED_POOL_SIZE。如果正常或立即關閉數據庫,則數據庫會把這些值記錄到存儲
參數文件(SPFILE)中,並在啓動時再使用這些值來設置各個區的默認大小。