SELECT size_for_estimate,
buffers_for_estimate,
estd_physical_read_factor,
estd_physical_reads
FROM v$db_cache_advice
WHERE name = 'DEFAULT'
AND block_size = (SELECT value FROM v$parameter WHERE name = 'db_block_size')
AND advice_status = 'ON';
SIZE_FACTOR = 1 代表目前大小;觀察擴大時物理讀下降幅度決定是否調大。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_GETS 高的 SQL、Cache 熱點資料,而非單看比率。DB_CACHE_SIZE 僅對應預設 DB_BLOCK_SIZE。若有 2K/4K/16K/32K 表空間,需額外設定 DB_2K_CACHE_SIZE、DB_16K_CACHE_SIZE 等參數。
| Pool | 用途 | 參數 |
|---|---|---|
| DEFAULT | 一般物件 | DB_CACHE_SIZE |
| KEEP | 高頻小表/索引,防止被淘汰 | DB_KEEP_CACHE_SIZE |
| RECYCLE | 大批次作業、低重用率物件,避免汙染 Default Pool | DB_RECYCLE_CACHE_SIZE |
SELECT * FROM v$buffer_pool;ALTER TABLE t STORAGE (BUFFER_POOL KEEP);,可在 DBA_TABLES.BUFFER_POOL 驗證。V$BH 或 DBA_TABLES.BLOCKS - EMPTY_BLOCKS 估算 used blocks。DB_KEEP_CACHE_SIZE 獨立於 Default Pool。NOCACHE 屬性對 KEEP Pool 無效。