第五課 調整緩沖區高速緩存(Buffer Cache)的性能
Buffer cache由數據塊組成。
1. Buffer cache的工作原理
LRU列表:MRU ………………。 LRU.(全表掃描FTS放在LRU端。)
緩沖區塊的狀態:Free、Pinned、Clean、Dirty.
Dirty List或Write List(寫列表)。
數據庫寫進程DBW0將緩沖區高速緩存中的數據寫到數據文件中。
2. 測量Buffer cache的性能
測量Buffer cache的命中率:
SQL> select 1-((physical.value – direct.value – lobs.value)/logical.value) “Buffer Cache Hit Ratio” from V$SYSSTAT physical, V$SYSSTAT direct,
V$SYSSTAT lobs, V$SYSSTAT logical where physical.name = ‘physical reads’
And direct.name = ‘physical reads direct’ and
lobs.name = ‘physical reads direct (lob)’
And logical.name = ‘session logical reads’;
“Buffer Cache Hit Ratio”的值要 > 90%.
使用STATSPACK來監視Buffer cache.
使用REPORT.TXT來監視Buffer cache.
非命中率指標:Free Buffer Inspected、Free Buffer Waits、Buffer Busy Waits.(V$sysstat)
使用Performance Manager(數據庫例程)來監視Buffer Cache.
3. 提高緩沖區高速緩存性能的方法
加大Buffer Cache的大小:init.ora參數DB_CACHE_SIZE(動態參數)。
使用Buffer Cache Advisory功能決定Buffer Cache的大小:
首先將init.ora參數DB_CACHE_ADVICE設成ON,然後查詢V$DB_CACHE_ADVICE.
使用多個緩沖區池:
Keep Pool: DB_KEEP_CACHE_SIZE
Recycle Pool:DB_RECYCLE_CACHE_SIZE
Default Pool: DB_CACHE_SIZE
在內存中緩存表: 表的CACHE選項,對優化小表的全表掃描。
正確創建索引。
4. 調整Large Pool和JAVA POOL
Large Pool用於共享服務器、RMAN、並行查詢、DBWR的從屬進程。
Large Pool的大小通過init.ora參數Large_pool_size設置。默認為8M.
從V$sgastat中監視free memory的值:
SQL>SELECT name,bytes FROM V$sgastat WHERE pool = ‘large pool’;
JAVA_POOL池的默認大小為32M.對於大型Java應用程序,JAVA_POOL池的大小應大於50M.
init.ora參數java_pool_size
從V$sgastat中監視free memory的值。
SQL>SELECT name,bytes FROM V$sgastat WHERE pool = ‘java pool’;