首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料庫前瞻性維護實戰:AWR 自動負載倉庫配置與調優指南

     編輯:Oracle 資料庫基礎

前言

資料庫維護分「反應性」(故障後處理)與「前瞻性」(故障前預防)。Oracle 10g+ 引入自動負載倉庫 (AWR),通過 MMON/MMNL 後台進程自動收集性能統計,構建前瞻性維護基石。本文詳細解析 AWR 架構、啟用配置、快照管理、報告解讀與最佳實踐。

一、反應性 vs 前瞻性維護

維度反應性維護前瞻性維護
觸發條件用戶投訴、告警觸發基線偏離、趨勢預測、閾值預警
處理時機故障發生後故障徵兆階段
業務影響已產生停機/慢查詢最小化或零影響
工具依賴即時 SQL、OS 命令AWR/ASH/ADDM/指標閾值

二、AWR 核心架構

1. 雙進程協作機制

  • MMON (Manageability Monitor):主進程,默認每小時啟動,收集統計、生成快照、評估閾值
  • MMNL (Manageability Monitor Lite):輕量輔助,高頻采集 ASH 數據(默認每秒)

2. 數據來源

  • 動態性能視圖 (V$SYSSTAT, V$SYSTEM_EVENT, V$SQL 等)
  • 數據字典視圖 (DBA_TABLES, DBA_INDEXES 等)
  • 優化器統計信息
  • 操作系統層面指標 (CPU、內存、I/O、網絡)

3. 存儲位置

  • 擁有者:SYS (10g) / SYS 但元數據在 SYSMAN (11g+ Enterprise Manager)
  • 表空間:SYSAUX (必須在線、足夠空間)
  • 核心表:WRH$_* 系列表、WRM$_* 系列表

三、啟用與配置 AWR

1. 關鍵參數:STATISTICS_LEVEL

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. 配置決策矩陣

級別收集範圍適用場景性能開銷
BASIC僅基本統計,禁用 AWR/ADDM/閾值測試、開發、極度資源受限最低
TYPICAL完整資料庫統計 (默認推薦)生產環境標準配置中等
ALLTYPICAL + OS 統計 + 執行計劃 + 定時信息複雜環境、需 OS 級關聯分析較高
場景INTERVALRETENTION理由
標準生產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 ProfileDB Time/秒, Redo size/秒, Logical reads/秒DB Time > 1 秒/秒 表示高負載
Top 5 Timed Events等待事件, 總等待時間, 平均等待db file sequential read 過高 → 索引/磁盤問題
Wait Events所有等待事件統計log file sync 高 → 提交頻繁/存儲慢
SQL StatisticsElapsed Time, CPU Time, Executions, Gets/ExecTop SQL 優化首選目標
Instance ActivityParses, Hard Parses, Sorts, LogonsHard Parse % > 10% → 綁定變量問題
Memory StatisticsSGA/PGA 分配、命中率Buffer Cache Hit % < 90% → 考慮擴容
OS StatisticsCPU 使用率、Load Average、MemoryCPU > 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')

八、最佳實踐總結

  1. 生產環境強制啟用 TYPICAL 級別,共享服務器升級 ALL
  2. 快照間隔 30-60 分鐘,保留 14-30 天,平衡粒度與空間
  3. SYSAUX 表空間專用監控,設置 80% 閾值告警
  4. 建立性能基線 (AWR Baseline),自動識別偏離
  5. 日巡檢 + 週趨勢 + 月規劃 三級維護節奏
  6. ADDM 建議優先處理,結合人工經驗驗證
  7. 導出關鍵歷史快照 歸檔,釋放 SYSAUX 空間

結語

AWR 將前瞻性維護從「經驗主義」轉為「數據驅動」。通過科學配置統計級別、快照策略、空間管理,建立多層級巡檢體系,DBA 可在故障萌芽階段發現並消除隱患,實現資料庫系統的持續穩定與高效運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved