一、三大版本調優方法論演進
| 版本 | 核心步驟 / 原則 | 特色 |
| 8i | 10 步驟:業務規則 → 資料設計 → 應用設計 → 邏輯結構 → 操作 → 存取路徑 → 記憶體 → I/O → 資源連結 → 基礎平台 | 結構化、自底向上 |
| 9i | 6 原則:定義問題 → 收集統計 → 對照通用方法 → 建立模型 → 實施改變 → 驗證目標 | 原則導向、強調統計與模型 |
| 10g R2 | 6 步驟:初始化檢查 → 前十大錯誤排查 → 概念模型 → 計畫補救 → 驗證 → 迭代 | 整合 ADDM 自動診斷、擴展統計收集 |
共同核心:有測量才有改善,沒有基線統計就無法判斷調優成效。
二、新手必備調優項目清單
- 緩衝區快取(Buffer Cache)
- Redo Log Buffer
- Shared Pool 記憶體
- 資料儲存優化
- 表空間優化
- Undo 區段調整
- 鎖爭用偵測
- SQL 調優(重中之重)
三、避免問題查詢的 17 條鐵律(節選自 Hassan Afyouni《Oracle9i Performance Tuning》)
- 避免笛卡兒積(缺少 Join 條件)。
- 大表避免全表掃描(建立適當索引)。
- 使用 SQL 標準寫法減少 Hard Parse(大小寫、空白一致)。
- WHERE 條件欄位缺索引時主動建立。
- 單一查詢 Join 表過多(> 5-7 張)考慮拆分或物化視圖。
- 監控
V$SESSION_LONGOPS 偵測長跑作業。
- 善用 Hint(
INDEX、LEADING、OPT_PARAM)引導優化器。
- 啟用
CURSOR_SHARING = FORCE/SIMILAR 減少解析(謹慎評估副作用)。
- RBO 僅在 CBO 明顯失效時作為臨時手段,長期必須修正統計資訊改用 CBO。
- 避免不必要的排序(
ORDER BY/GROUP BY 能用索引消除就消除)。
- 定期監控索引「變暗」(未被使用),重建或移除。
- 複合索引勿重複欄位,注意欄位順序選擇性。
- 持續監控查詢統計(
V$SQL、V$SQL_PLAN、AWR)。
- 表與索引分置不同表空間(減少 I/O 爭用,配合 ASM 更靈活)。
- 適當使用分區表與本地索引(大表、歷史資料、維護窗口)。
- WHERE 條件使用字面值改用綁定變數(
:b1),提升 Cursor Sharing。
- 統計資訊定期收集(
DBMS_STATS),避免優化器誤判。
四、關鍵補充說明
- 第 9 條: RBO 已去支援,12c 移除,務必轉向 CBO + 完整統計資訊。
- 第 14 條: 單純分置表空間不足,需搭配不同磁碟/控制器/ASM 磁碟組才能真正隔離 I/O。
- 綁定變數實作: 應用端使用 PreparedStatement(Java)、
oci_bind_by_name(PHP)、cursor.execute(sql, params)(Python),切勿字串拼接 SQL。
五、下一步預告
下集將深入示範「如何正確使用綁定變數」、統計資訊收集策略、執行計畫閱讀技巧與實戰案例分析。