資料庫維護分「反應性」(故障後處理)與「前瞻性」(故障前預防)。Oracle 10g+ 引入自動負載倉庫 (AWR),通過 MMON/MMNL 後台進程自動收集性能統計,構建前瞻性維護基石。本文詳細解析 AWR 架構、啟用配置、快照管理、報告解讀與最佳實踐。
| 級別 | 收集範圍 | 適用場景 | 性能開銷 |
| BASIC | 僅基本統計,禁用 AWR/ADDM/閾值 | 測試、開發、極度資源受限 | 最低 |
| TYPICAL | 完整資料庫統計 (默認推薦) | 生產環境標準配置 | 中等 |
| ALL | TYPICAL + OS 統計 + 執行計劃 + 定時信息 | 複雜環境、需 OS 級關聯分析 | 較高 |
2. 修改參數(需重啟或 SPFILE 生效)
-- 查看當前值
SHOW PARAMETER statistics_level;
-- 修改為 TYPICAL (推薦生產)
ALTER SYSTEM SET STATISTICS_LEVEL = TYPICAL SCOPE = BOTH;
-- 修改為 ALL (需 OS 級分析)
ALTER SYSTEM SET STATISTICS_LEVEL = ALL SCOPE = BOTH;
3. 企業級選型建議
- 單純資料庫服務器:
TYPICAL 足夠
- 共享服務器 (資料庫 + 應用 + 批處理):
ALL 關聯 OS 任務計劃
- 高安全/合規環境:
ALL 保留完整審計軌跡
四、快照配置管理
1. 核心參數
- INTERVAL:快照間隔,默認 60 分鐘,範圍 10-52560000 分鐘
- RETENTION:保留時間,默認 7 天 (10080 分鐘),範圍 1-52560000 分鐘
2. 修改快照設置
-- 修改為 30 分鐘間隔,保留 10 天 (14400 分鐘)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
INTERVAL => 30,
RETENTION => 14400
);
-- 僅修改保留期
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
RETENTION => 20160 -- 14 天
);
-- 查看當前設置
SELECT * FROM DBA_HIST_WR_CONTROL;
3. 配置決策矩陣
| 場景 | INTERVAL | RETENTION | 理由 |
| 標準生產 | 60 分鐘 | 7-14 天 | 平衡開銷與分析粒度 |
| 高頻變化/核心交易 | 15-30 分鐘 | 14-30 天 | 捕捉短時尖峰、趨勢分析 |
| 性能調優專項 | 10-15 分鐘 | 3-7 天 | 臨時加密,調優後恢復 |
| 合規審計要求 | 60 分鐘 | 90-365 天 | 滿足法規保留期 |
4. 空間管理策略
- SYSAUX 表空間預留 10-20% 空間給 AWR
- 監控查詢:
SELECT * FROM V$SYSAUX_OCCUPANTS WHERE OCCUPANT_NAME LIKE 'AWR%'
- 空間不足時:縮短 RETENTION、遷移 SYSAUX、導出歷史快照歸檔
五、AWR 核心報告解讀
1. 生成報告腳本
-- 文本報告
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
-- HTML 報告
@$ORACLE_HOME/rdbms/admin/awrrpti.sql
-- 區間報告 (指定快照 ID)
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
-- 輸入 begin_snap, end_snap, report_type
2. 關鍵關注區塊
| 報告區塊 | 關鍵指標 | 異常閾值參考 |
| Load Profile | DB Time/秒, Redo size/秒, Logical reads/秒 | DB Time > 1 秒/秒 表示高負載 |
| Top 5 Timed Events | 等待事件, 總等待時間, 平均等待 | db file sequential read 過高 → 索引/磁盤問題 |
| Wait Events | 所有等待事件統計 | log file sync 高 → 提交頻繁/存儲慢 |
| SQL Statistics | Elapsed Time, CPU Time, Executions, Gets/Exec | Top SQL 優化首選目標 |
| Instance Activity | Parses, Hard Parses, Sorts, Logons | Hard Parse % > 10% → 綁定變量問題 |
| Memory Statistics | SGA/PGA 分配、命中率 | Buffer Cache Hit % < 90% → 考慮擴容 |
| OS Statistics | CPU 使用率、Load Average、Memory | CPU > 85% 持續 → 瓶頸預警 |
六、前瞻性維護實戰工作流
1. 日常巡檢 (自動化腳本)
-- 1. 檢查 AWR 狀態
SELECT SNAP_INTERVAL, RETENTION FROM DBA_HIST_WR_CONTROL;
-- 2. 檢查 SYSAUX 空間
SELECT OCCUPANT_NAME, SPACE_USAGE_KBYTES
FROM V$SYSAUX_OCCUPANTS
WHERE OCCUPANT_NAME IN ('AWR','ASH');
-- 3. 關鍵指標基線偏離檢測
-- 比較近期 AWR 與基線期 (如上月同期) 的 Load Profile 差異
2. 週度性能趨勢分析
- 生成連續 7 天 AWR 差異報告
- 關注:DB Time 趨勢、Top SQL 變化、等待事件演變
- 識別「緩慢惡化」型問題(如索引碎片累積、統計信息過期)
3. 月度容量規劃
- 分析 Segment 增長趨勢 (DBA_HIST_SEG_STAT)
- 預測表空間耗盡時間
- 規劃分區歸檔、存儲擴容
七、進階:ASH 報告與 ADDM 自動診斷
1. ASH 報告 (活動會話歷史)
@$ORACLE_HOME/rdbms/admin/ashrpt.sql
-- 秒級采樣,定位短時性能抖動、會話級根因
2. ADDM 自動診斷
- 每次快照後自動運行,分析 Top 問題並給出建議
- 查看結果:
SELECT * FROM DBA_ADVISOR_FINDINGS WHERE TASK_NAME LIKE 'ADDM%'
- 手動觸發:
EXEC DBMS_ADVISOR.EXECUTE_TASK('ADDM_TASK_123')
八、最佳實踐總結
- 生產環境強制啟用 TYPICAL 級別,共享服務器升級 ALL
- 快照間隔 30-60 分鐘,保留 14-30 天,平衡粒度與空間
- SYSAUX 表空間專用監控,設置 80% 閾值告警
- 建立性能基線 (AWR Baseline),自動識別偏離
- 日巡檢 + 週趨勢 + 月規劃 三級維護節奏
- ADDM 建議優先處理,結合人工經驗驗證
- 導出關鍵歷史快照 歸檔,釋放 SYSAUX 空間
結語
AWR 將前瞻性維護從「經驗主義」轉為「數據驅動」。通過科學配置統計級別、快照策略、空間管理,建立多層級巡檢體系,DBA 可在故障萌芽階段發現並消除隱患,實現資料庫系統的持續穩定與高效運行。
- 上一篇文章: Oracle 資料庫徹底卸載清理指南:從服務停止到註冊表清理的完整流程
- 下一篇文章: Oracle 同義詞深度解析:三大驚喜優勢、兩類型差異與命名解析機制
Copyright ©
程式碼之家 All Rights Reserved