Oracle 效能調優的基石在於選對優化器、走對存取路徑、用好共享 SQL。本文系統梳理三大支柱的原理、參數設定與實務誤區。
| 模式 | 適用場景 | 設定方式 |
|---|---|---|
| RULE (RBO) | 舊系統、無統計資訊、規則明確 | OPTIMIZER_MODE=RULE 或 Hint /*+ RULE */ |
| COST (CBO) | 現代應用、統計資訊完整、複雜查詢 | OPTIMIZER_MODE=ALL_ROWS/FIRST_ROWS,需定期 ANALYZE/DBMS_STATS |
| CHOOSE | 預設值,有統計用 CBO,無統計用 RBO | OPTIMIZER_MODE=CHOOSE(不建議生產環境) |
建議:生產環境明確指定 RULE 或 COST,避免 CHOOSE 導致計畫不穩定與非預期全表掃描。
DB_FILE_MULTIBLOCK_READ_COUNT)優化。適合小表、大比例資料存取、無索引欄位。SQL 文本在共享池(Shared Pool)按字元級嚴格匹配:大小寫、空白、換行、物件解析、綁定變數名稱必須完全一致才能共享。
SELECT * FROM EMP ≠ select * from emp ≠ SELECT * FROM EMP (尾端空白)。:blk1.pin ≠ :blk1.ot_ind,即使執行時值相同。SHARED_POOL_SIZE 容納更多游標,監控 V$LIBRARYCACHE 命中率(>90%)、RELOADS/PINS(<1%)。