Oracle 9i 引入 V$DB_CACHE_ADVICE,可模擬 20 種緩衝區大小 (10%~200%) 的「未命中率」,輔助 DB_CACHE_SIZE 調整。因 9i 需維護多個緩衝區,此功能極具價值。
-- 動態啟用 (會從 Shared Pool 竊取記憶體,影響 Library Cache) ALTER SYSTEM SET DB_CACHE_ADVICE = ON; -- 建議:啟動時預分配,避免運行期搶佔 -- init.ora 設定: DB_CACHE_ADVICE = READY
| 日期 | 小時 | 緩衝區 | 命中率 |
|---|---|---|---|
| 2001-01-27 | 09 | DEFAULT | 45% |
| 2001-01-28 | 09 | RECYCLE | 41% |
| 2001-01-29 | 10 | DEFAULT | 36% |
| 2001-01-30 | 09 | DEFAULT | 28% |
| 2001-02-02 | 10 | DEFAULT | 83% |
規則:命中率 < 90% 時考慮增加 DB_CACHE_SIZE。上表顯示每天 08:00-09:00 需求最大,可從 PGA_AGGREGATE_TARGET 借用記憶體。
| 緩衝區大小 | Buffers | 預估物理讀取因子 | 預估物理讀取次數 |
|---|---|---|---|
| 30 MB (10%) | 3,802 | 18.70 | 192,317,943 |
| 60 MB (20%) | 7,604 | 12.83 | 131,949,536 |
| 91 MB (30%) | 11,406 | 7.38 | 75,865,861 |
| 121 MB (40%) | 15,208 | 4.97 | 51,111,658 |
| 152 MB (50%) | 19,010 | 3.85 | 39,620,124 |
隨緩衝區增大,物理讀取大幅下降。結合業務時段與記憶體預算,選擇拐點大小 (如 121 MB) 即可獲得最佳投報比。
DB_CACHE_ADVICE = READY 並重啟V$DB_CACHE_ADVICE 取得模擬曲線DB_CACHE_SIZE 動態調整或靜態增大V$SYSSTAT 命中率驗證效果