共用池、大池、Java池、快取的記憶體通過設定配置單位作為基本單元分配。在SGA小於1GB的情況下,配置單位尺寸為
4MB,當SGA大於1GB時,單元尺寸為16MB。該單元大小能通過視圖 V$SGA_DYNAMIC_COMPONENTS查詢。這個單元決定了在SGA中所有
動態分配地區的組成狀態。例如下面查詢了系統中SGA當前分配的尺寸和單元大小:
SQL>select COMPONENT,CURRENT_SIZE,GRANULE_SIZE from V$SGA_DYNAMIC_COMPONENTS;
SQL> run
1* select COMPONENT,CURRENT_SIZE,GRANULE_SIZE from V$SGA_DYNAMIC_COMPONENTS
COMPONENT CURRENT_SIZE GRANULE_SIZE
-------------------- ------------ ------------
shared pool 67108864 4194304
large pool 4194304 4194304
java pool 4194304 4194304
streams pool 0 4194304
DEFAULT buffer cache 205520896 4194304
KEEP buffer cache 0 4194304
RECYCLE buffer cache 0 4194304
DEFAULT 2K buffer ca 0 4194304
che
DEFAULT 4K buffer ca 0 4194304
COMPONENT CURRENT_SIZE GRANULE_SIZE
-------------------- ------------ ------------
che
DEFAULT 8K buffer ca 0 4194304
che
DEFAULT 16K buffer c 0 4194304
ache
DEFAULT 32K buffer c 0 4194304
ache
COMPONENT CURRENT_SIZE GRANULE_SIZE
-------------------- ------------ ------------
ASM Buffer Cache 0 4194304
13 rows selected.
SQL>
|||||||||||||||||||||||||||
保留池和迴圈池
顯然,最常用的資料應該長期保留在記憶體結構中。保留池的作用就是長期存放某些“熱”的資料區塊,也就是說,你應該想辦法找出你的系統中那些“熱”的表,並將其綁定在保留池中。
系統參數DB_KEEP_CACHE_SIZE定義了保留池的空間大小,其資料區塊尺寸為本系統標準的資料區塊尺寸。應該注意的是,保留池並不是
預設池的一個子集。因此配置時要注意其大小不應超出作業系統可以提供的容量。
當遇到一個工程上的難題:業務資料庫系統中有成百上千張表,還有成千上萬個索引,究竟哪些表或索引應該放入保留池呢?
遴選規則如下:
該表中資料並不是很大
該表在SQL操作中被頻繁調用
該表往往是資料庫實體關聯圖中的中間表或參照表
和保留池的意義敲好相反,一些鮮有SQL操作的大表,其資料區塊並無必要長期保留在資料緩衝中。
這時,我們可以通過設定迴圈池,將這些對象放入迴圈池。
迴圈池通過初始化參數DB_RECYBLE_CACHE_SIZE指定。同樣地,迴圈池不是預設池的一個子集。下面的命令設定DB_KEEP_CACHE_SIZE初始化
參數,將保留池尺寸定位120MB:
SQL>alter system set db_keep_cache_size=120M scope=both;
|||||