AWR (Automatic Workload Repository) 報告長達數十頁,數百個指標,若無系統方法論,極易陷入「指標海洋」無法定位核心問題。本文構建 「整體→局部、對比→定位、業務→指標」 四維分析框架,配合關鍵指標閾值、典型等待事件解讀、RAC 專項指標與實戰跳躍式閱讀技巧,助您從報告中精準提煉性能瓶頸。
雙重數據源:
-- 查看當前配置
SELECT snap_interval, retention FROM dba_hist_wr_control;
-- SNAP_INTERVAL: +00000 01:00:00.0 (1小時)
-- RETENTION: +00007 00:00:00.0 (7天)
-- 修改:間隔 30分鐘,保留 10天
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL => 30, RETENTION => 10*24*60);
-- 手動創建快照 (變更前/後、壓測節點)
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
@?/rdbms/admin/awrrpt.sql
-- 參數:報告類型 (HTML/TEXT)、實例號、起始/結束 Snap ID、輸出文件名
| 指標 | 關注意義 | 異常信號 |
|---|---|---|
| DB Time(s)/Per Sec | 每秒資料庫活躍會話數 (AAS),核心負載指標 | 接近/超過 CPU 核心數 → CPU 瓶頸 |
| Redo Size/Per Sec | 寫入壓力,反映 DML 吞吐量 | 突增 → 批量作業/異常 DML |
| Logical Reads/Per Sec | 邏輯讀吞吐,緩存命中率分母 | 異常高 → 全表掃描/笛卡爾積 |
| Physical Reads/Per Sec | 物理讀吞吐,I/O 壓力直觀體現 | 高且伴隨 db file scattered read → 全掃描 |
| Parses (Hard)/Per Sec | 硬解析頻率,共享池/_cursor_sharing_ 健康度 | > 100/s → 綁定變量缺失/共享池壓力 |
| User Calls/Per Sec | 客戶端交互頻率 | 極高 → 逐行處理/缺乏陣列綁定 |
| 指標 | 健康閾值 | 異常含義 |
|---|---|---|
| Buffer Nowait % | > 99.9% | 緩存爭用 (CBC Latch) |
| Redo NoWait % | > 99.9% | Redo Allocation Latch / Log File Sync |
| Library Hit % | > 99% | 硬解析過多 / 共享池不足 |
| Soft Parse % | > 95% | 軟解析比例低 = 硬解析高 |
| Execute to Parse % | > 70% (OLTP 典型 > 90%) | 低 = 大量硬解析 = 綁定變量問題 |
| Parse CPU to Parse Elapsed % | > 80% | 解析 CPU 佔比低 = 等待鎖/鎖 |
| 等待事件 | 核心含義 | 典型根因 | 關聯章節 |
|---|---|---|---|
| db file sequential read | 單塊讀 (索引訪問、Undo 讀取) | 索引深度過深、熱塊、Undo 爭用 | SQL Statistics / Segments by Logical Reads |
| db file scattered read | 多塊讀 (全表掃描、快速全掃描) | 缺失索引、統計信息失效、並行度過高 | SQL Statistics / Segments by Physical Reads |
| log file sync | Commit 等待 LGWR 寫入 Redo | 存儲延遲、Redo 日志組不足、Commit 過頻 | Redo Log Statistics / Wait Events Detail |
| log file switch completion | 日志切換等待歸檔/檢查點完成 | 歸檔慢、檢查點不完整、日志文件過小 | Redo Log Statistics |
| enq: TX - row lock contention | 行鎖爭用 | 長事務、未提交 DML、熱點行更新 | Blocking Sessions / SQL Statistics |
| latch: cache buffers chains | 熱塊爭用 (CBC Latch) | 熱門索引根塊、嵌套循環連接、統計信息錯誤 | Segments by Logical Reads / Latch Statistics |
| cursor: pin S wait on X | 游標互斥體爭用 (硬解析/共享池) | 未用綁定變量、共享池碎片、單一熱門 SQL | Library Cache Statistics / SQL Statistics |
動作:複製 SQL_ID → DBMS_XPLAN.DISPLAY_AWR(sql_id) 獲取歷史執行計劃 → 對比正常/異常時期 Plan Hash Value 差異。
=== AWR 分析報告模板 ===
1. 基線對比
- 對比時段: 正常 [Snap X-Y] vs 異常 [Snap A-B]
- 業務背景: 促銷大促 / 批量跑批 / 例行維護
2. 整體負載變化
- AAS: 正常 12.3 → 異常 45.8 (CPU 32 核, 已過載)
- Hard Parse: 正常 5/s → 異常 320/s (綁定變量失效)
- Physical Reads: 正常 800/s → 異常 4500/s (全掃描激增)
3. 核心等待事件 (Top 5 變化)
- db file scattered read: 15% → 62% (全表掃描為主)
- log file sync: 8% → 22% (Commit 等待)
4. 關鍵 SQL 定位
- SQL_ID: abc123 (佔 DB Time 35%)
- 問題: Plan 從 INDEX RANGE SCAN 變為 FULL TABLE SCAN
- 根因: 統計信息過期 + 綁定窺探導致計劃翻轉
5. 根因鏈條
統計信息未收集 → 優化器誤判基數 → 選擇 FTS → 物理讀激增 → I/O 瓶頸 → Log File Sync 連帶惡化
6. 採取行動
- 立即: DBMS_STATS.GATHER_TABLE_STATS (關鍵表)
- 短期: SQL Profile 固化優質計劃 / Cursor Sharing 設 FORCE
- 長期: 自動統計收集策略優化 / 應用綁定變量改造
7. 驗證指標
- AAS 降至 < 20, Scattered Read 佔比 < 20%, Hard Parse < 50/s
AWR 分析不是「看報告」,而是「對比基線 → 定位變化 → 鎖定等待 → 鎖定 SQL → 還原根因 → 驗證治療」 的閉環醫療過程。掌握 Load Profile、Instance Efficiency、Top Events、Top SQL、RAC 專項、內存/存儲 六大閱讀站點,建立個人化「跳躍式閱讀地圖」,您就能在 10 分鐘內從百頁報告中提煉出核心性能處方。