緩衝區管理演進:中點插入策略
8i 以前:新區塊放入 LRU 列表最前端(MRU)。
8i 以後:新區塊插入 LRU 列表中點,僅在被重複存取時才提升至熱區。此機制將緩衝區自然分為:
- 熱區:LRU 前半段,高頻存取區塊
- 冷區:LRU 後半段,新讀入或低頻區塊
隱藏參數 _db_percent_hot_default 等可調整熱區比例,官方不建議修改。
追蹤熱門區塊:X$BH 視圖
SELECT obj, dbarfil file#, dbablk block#, tch touches
FROM x$bh
WHERE tch > 10
ORDER BY tch DESC;
TCH (Touch Count):被存取次數,超過 _db_aging_hot_criteria 門檻從冷區升入熱區
- 識別熱門區塊後,可考慮移入
KEEP Pool 永久駐留
多重緩衝池架構
| Pool | 用途 | 典型物件 |
| DEFAULT | 一般物件 | 大多數表、索引 |
| KEEP | 永久保留 | 小型常用查詢表、程式碼表 |
| RECYCLE | 快速淘汰 | 大型掃描表、歷史歸檔表 |
完整資料庫緩存策略
64 位元定址普及後,中小型資料庫(<20 GB)可嘗試全庫緩存:
- 計算總區塊數:
SELECT SUM(blocks) FROM dba_data_files;
- 設定
db_block_buffers 涵蓋所有區塊
- 啟動時執行
SELECT COUNT(*) FROM table 逐表預熱
- 僅讀操作受益極大(記憶體存取比磁碟快 ~14,000 倍),寫入仍需磁碟 I/O
關鍵指標監控
- 緩存命中率 < 90% → 擴充緩衝區
- 觀察
V$BH、V$DB_CACHE_ADVICE 模擬不同大小效益
- 上一篇文章: 掌握 Oracle 執行計劃機制優化多表聯結查詢效能
- 下一篇文章: 大型 Oracle 系統查詢統計效能優化:物理設計關鍵參數設定
Copyright ©
程式碼之家 All Rights Reserved