Oracle AWR 性能报告

Oracle AWR 性能报告

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

AWR(Automatic Workload Repository) 是 Oracle 性能数据仓库[1]:

核心特性

  • 自动采集快照
  • 性能数据存储
  • 报告生成
  • 历史对比

2. AWR 配置

2.1 查看设置

SELECT * FROM dba_hist_wr_control;
-- SNAP_INTERVAL: 快照间隔(默认 1 小时)
-- RETENTION: 保留时间(默认 8 天)

2.2 修改

BEGIN
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
    retention => 43200,  -- 分钟(30 天)
    interval => 30       -- 分钟
  );
END;
/

2.3 手动快照

EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

3. 生成报告

3.1 awrrpt.sql

# SQL*Plus 中执行
sqlplus / as sysdba
@?/rdbms/admin/awrrpt.sql

3.2 选项

  • 报告类型:HTML 或 TEXT
  • 天数:快照范围
  • 开始/结束快照

3.3 RAC

# 单实例
@?/rdbms/admin/awrrpt.sql

# RAC 全部
@?/rdbms/admin/awrgrpt.sql

# RAC 单实例
@?/rdbms/admin/awrrpti.sql

4. AWR 报告关键部分

4.1 概要

  • DB Time vs Elapsed
  • DB CPU
  • 平均活跃会话

4.2 Top 5 Timed Events

Event                          Waits    Time(s)  % Total
db file sequential read        100,000  500      50%
CPU time                                300      30%
db file scattered read         50,000   100      10%
log file sync                  10,000   50       5%

4.3 SQL Ordered by Elapsed Time

SQL Id       Elapsed  Executions  % Total  % CPU
1abc...      500s     1000        25%      20%
2def...      300s     500         15%      10%

4.4 SQL Ordered by Gets

  • 逻辑读最多的 SQL
  • 优化目标

4.5 SQL Ordered by Reads

  • 物理读最多的 SQL
  • I/O 优化

5. 关键指标

5.1 DB Time

  • 数据库处理时间
  • DB Time > Elapsed:活跃会话多

5.2 AAS(Average Active Sessions)

AAS = DB Time / Elapsed Time
  • AAS 高:负载重

5.3 Top Wait Events

  • 等待事件分析
  • 性能瓶颈

详细见:Oracle 等待事件(Wait Events)


6. ASH(Active Session History)

6.1 概述

  • 每秒采样活跃会话
  • V$ACTIVE_SESSION_HISTORY 视图

6.2 生成报告

@?/rdbms/admin/ashrpt.sql

6.3 查询

-- Top SQL
SELECT sql_id, COUNT(*) 
FROM v$active_session_history 
WHERE sample_time > SYSDATE - 1/24
GROUP BY sql_id 
ORDER BY COUNT(*) DESC;

7. ADDM

7.1 自动诊断

@?/rdbms/admin/addmrpt.sql

7.2 手动分析

VAR tname VARCHAR2(50);
BEGIN
  DBMS_ADVISOR.CREATE_TASK('ADDM', :tname);
  DBMS_ADVISOR.SET_TASK_PARAMETER(:tname, 'START_SNAPSHOT', 100);
  DBMS_ADVISOR.SET_TASK_PARAMETER(:tname, 'END_SNAPSHOT', 101);
  DBMS_ADVISOR.EXECUTE_TASK(:tname);
END;
/

8. AWR 基线

8.1 创建基线

BEGIN
  DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
    start_snap_id => 100,
    end_snap_id => 101,
    baseline_name => 'good_performance'
  );
END;
/

8.2 模板

BEGIN
  DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE(
    template_name => 'weekly_template',
    template_type => 'REPEATING',
    day_of_week => 'MONDAY',
    hour_in_day => 9
  );
END;
/

9. AWR 视图

9.1 常用视图

-- 快照
SELECT * FROM dba_hist_snapshot;

-- SQL
SELECT * FROM dba_hist_sqltext WHERE sql_id = '&sql_id';

-- 系统统计
SELECT * FROM dba_hist_sysstat;

-- 等待事件
SELECT * FROM dba_hist_system_event;

9.2 自定义查询

-- Top SQL by elapsed
SELECT 
  sql_id,
  ROUND(SUM(elapsed_time_delta) / 1000000, 2) AS elapsed_sec
FROM dba_hist_sqlstat
WHERE snap_id BETWEEN 100 AND 110
GROUP BY sql_id
ORDER BY elapsed_sec DESC
FETCH FIRST 10 ROWS ONLY;

10. 常见坑与排错

10.1 AWR 数据丢失

-- 1. 检查 RETENTION
-- 2. 检查 SYSAUX 空间
SELECT * FROM v$sysaux_occupants WHERE occupant_name = 'SM/AWR';

10.2 报告生成失败

-- 检查权限
GRANT SELECT ANY DICTIONARY TO user;

10.3 SYSAUX 满

-- 清理旧数据
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 4320);

11. 最佳实践

  1. 定期采集快照:1 小时
  2. 保留 30 天:分析
  3. 生成基线:对比
  4. Top SQL 分析:优化
  5. 等待事件:瓶颈
  6. ADDM 自动诊断:建议
  7. ASH 短时分析:实时
  8. 监控 SYSAUX:空间
  9. 定期导出:归档
  10. 结合 Statspack:兼容

12. 参考资料

[1] Oracle Database Performance Tuning Guide 19c, “AWR” https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/automatic-workload-repository.html