Method R 核心定義
R = Response Time (回應時間)。Cary Millsap 提出,以業務關鍵任務的回應時間為唯一優化目標。
四步驟循環流程
- Target:識別業務關鍵任務 (非技術指標),如「下單付款 < 2 秒」
- Profile:收集該任務完整、未聚合的 Profile 資料 (Extended SQL Trace, 10046 Event)
- React:針對回報投資率 (ROI) 最高的候選修復執行
- Stop Rule:修復成本 > 問題成本 → 停止
- Loop:回到步驟 1
Profile 核心內容
- 每個 SQL/操作的 Response Time = Service Time + Wait Time
- 詳細分解:CPU、I/O (db file sequential/scattered read)、鎖 (enq:)、Log Write、Network、Parse、Fetch 等
- 未聚合:保留每次執行的細節,非 AWR/ASH 類聚合報表
- 工具:
DBMS_MONITOR.SESSION_TRACE_ENABLE、TRCSESS、TKPROF、Method R Profiler (商業工具)
與其他方法論對比
| 方法論 | 核心焦點 | 適用範圍 | 局限 | 與 Method R 關係 |
| Method R | 業務任務回應時間 | 全棧 (App/DB/OS/Network) | 需詳細 Trace、商業工具收費 | 基準方法 |
| OWI (Oracle Wait Interface) | 資料庫等待事件 | 僅資料庫層 | 無業務語境、忽略 CPU/應用層 | Method R 的資料來源之一 |
| YAPP (笛卡兒分解法) | 服務/等待時間成分排序優化 | 資料庫層 | 無業務導向、無法處理 Idle Events、非全棧 | Method R 的資料庫層子集演化版 |
| Bottleneck Analysis | 尋找系統瓶頸 | 系統層 | 瓶頸不等於業務痛點、可能優化非關鍵路徑 | Method R 反其道而行:直指業務任務 |
| Tuning by Layers | 自下而上 (OS→DB→App) | 全棧 | 效率低、大量無效分析 | Method R 自上而下,ROI 導向 |
Method R 實戰操作步驟
- 業務利益相關者訪談:定義關鍵任務、SLA、痛點
- 啟用 10046 Trace:
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 123, serial_num => 456,
waits => TRUE, binds => TRUE, plan_stat => 'ALL_EXECUTIONS');
- 執行業務任務:重現問題場景
- 停用 Trace、收集 .trc 檔
- 分析 Profile:
- 用
TKPROF 或 Method R Profiler 產生報表
- 聚焦 Total Response Time 佔比最高的 SQL/操作
- 檢視 Wait Event 分佈:db file sequential read → 索引/表存取;log file sync → Commit 頻率;enq: TX → 鎖爭用
- 制定候選修復:索引、SQL 改寫、架構調整、參數調整、硬體升級
- ROI 評估:預估改善時間 × 頻率 × 業務價值 / 實施成本
- 實施最高 ROI 修復
- 驗證:重新 Trace 對比
- 循環
關鍵觀念釐清
- 不等於「調整參數」:參數調整只是候選修復之一,且通常 ROI 低
- 不等於「消除所有等待」:Idle Events (SQL*Net message from client) 不需處理
- 不等於「全表掃描即壞事」:小表/高選擇性 FTS 可能最優
- 業務語境不可或缺:同樣的 SQL,批次報表容忍 30 秒,OLTP 要求 < 0.5 秒
工具鏈建議
| 階段 | 免費工具 | 商業工具 |
| Trace 收集 | DBMS_MONITOR, SQL Trace | Method R Workbench |
| Trace 分析 | TKPROF, TRCSESS, OraSRP | Method R Profiler |
| 視覺化 | SQL Developer, OEM | Method R Workbench |
| 負載模擬 | Swingbench, HammerDB | LoadRunner, SilkPerformer |