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
- 等待事件分析
- 性能瓶颈
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 小时
- 保留 30 天:分析
- 生成基线:对比
- Top SQL 分析:优化
- 等待事件:瓶颈
- ADDM 自动诊断:建议
- ASH 短时分析:实时
- 监控 SYSAUX:空间
- 定期导出:归档
- 结合 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