Oracle AWR 详解
Oracle AWR 详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
AWR(Automatic Workload Repository)是 Oracle 性能数据仓库[1]:
作用:
- 性能数据收集
- 历史数据
- 报告生成
- 自治优化
详细见:Oracle AWR 报告详解。
2. 架构
┌────────────────────────────────┐
│ MMON(Manageability Monitor) │
│ - 自动快照 │
└────────────┬───────────────────┘
│
┌────────────▼───────────────────┐
│ SYSAUX 表空间 │
│ - WRx$ 表 │
│ - 历史数据 │
└────────────────────────────────┘
3. 配置
3.1 STATISTICS_LEVEL
SHOW PARAMETER statistics_level
-- TYPICAL(默认)/ ALL / BASIC
ALTER SYSTEM SET statistics_level = ALL SCOPE=SPFILE;
3.2 快照设置
-- 查询
SELECT snap_interval, retention FROM dba_hist_wr_control;
-- 修改
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 43200, -- 30 天(分钟)
interval => 30 -- 30 分钟
);
3.3 启用
-- CONTROL_MANAGEMENT_PACK_ACCESS
SHOW PARAMETER control_management_pack_access
-- DIAGNOSTIC+TUNING(默认)
ALTER SYSTEM SET control_management_pack_access = 'DIAGNOSTIC+TUNING';
4. 快照管理
4.1 手动快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
-- ALL(默认) / TYPICAL
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(flush_level => 'ALL');
4.2 删除
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
low_snap_id => 100,
high_snap_id => 200
);
4.3 修改
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(...);
4.4 查看
SELECT snap_id, begin_interval_time, end_interval_time, error_count
FROM dba_hist_snapshot
ORDER BY snap_id DESC;
5. Baseline
5.1 创建
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
start_snap_id => 100,
end_snap_id => 110,
baseline_name => 'peak_baseline',
expiration => 30 -- 天
);
5.2 模板
-- 创建模板
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE(
start_time => TO_DATE('2026-07-21 09:00', 'YYYY-MM-DD HH24:MI'),
end_time => TO_DATE('2026-07-21 18:00', 'YYYY-MM-DD HH24:MI'),
baseline_name => 'workday',
expiration => 365
);
5.3 查看
SELECT baseline_id, baseline_name, start_snap_id, end_snap_id, expiration
FROM dba_hist_baseline;
5.4 删除
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(
baseline_name => 'peak_baseline'
);
6. AWR 报告
6.1 命令行
# 单实例
sqlplus / as sysdba
@?/rdbms/admin/awrrpt.sql
# RAC
@?/rdbms/admin/awrgrpt.sql -- 整集群
@?/rdbms/admin/awrrpti.sql -- 单实例
# 周期
@?/rdbms/admin/awrrpt.sql
6.2 选项
- HTML / TEXT
- snap_id 范围
- 实例
6.3 生成
-- 脚本
SELECT output FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(
dbid => :dbid,
inst_num => :inst,
bid => :begin_snap,
eid => :end_snap
));
6.4 ASH
@?/rdbms/admin/ashrpt.sql
详细见:Oracle ASH 详解。
6.5 ADDM
@?/rdbms/admin/addmrpt.sql
详细见:Oracle ADDM 详解。
6.6 对比
@?/rdbms/admin/awrddrpt.sql -- AWR 对比
7. AWR 报告内容
7.1 概要
- DB 时间
- DB CPU
- 快照范围
- 数据库信息
7.2 Top 5 等待事件
- 主要瓶颈
- 等待事件
- 时间占比
详细见:Oracle 等待事件详解。
7.3 SQL 统计
- Top SQL(elapsed time)
- Top SQL(CPU)
- Top SQL(gets)
- Top SQL(reads)
- Top SQL(executions)
- Top SQL(parse)
7.4 实例活动
- Load Profile
- Instance Efficiency
- Top 5 Timed Events
7.5 I/O
- Tablespace I/O
- File I/O
- Buffer Pool
7.6 内存
- SGA
- PGA
- Buffer Cache
- Shared Pool
详细见:Oracle 内存管理 SGA/PGA。
7.7 并发
- 锁
- Latch
- Mutex
详细见:Oracle 锁与闩锁诊断。
8. AWR 视图
8.1 主要
| 视图 | 内容 |
|---|---|
| DBA_HIST_SNAPSHOT | 快照 |
| DBA_HIST_SQLSTAT | SQL 统计 |
| DBA_HIST_SYSSTAT | 系统统计 |
| DBA_HIST_SYSMETRIC | 系统指标 |
| DBA_HIST_ACTIVE_SESS_HISTORY | ASH |
| DBA_HIST_WAITSTAT | 等待 |
| DBA_HIST_LATCH | Latch |
| DBA_HIST_SEG_STAT | 段统计 |
| DBA_HIST_TABLESPACE_STAT | 表空间 |
| DBA_HIST_FILESTAT | 文件 |
| DBA_HIST_BASELINE | 基线 |
| DBA_HIST_WR_CONTROL | 配置 |
8.2 查询示例
-- Top SQL
SELECT sql_id, executions, elapsed_time, cpu_time, buffer_gets, disk_reads
FROM dba_hist_sqlstat
WHERE snap_id BETWEEN 100 AND 110
ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;
-- 等待事件
SELECT event_name, total_waits, time_waited
FROM dba_hist_system_event
WHERE snap_id = 110
ORDER BY time_waited DESC FETCH FIRST 10 ROWS ONLY;
-- 段统计
SELECT obj#, dataobj#, logical_reads, db_block_changes, physical_reads
FROM dba_hist_seg_stat
WHERE snap_id = 110
ORDER BY logical_reads DESC FETCH FIRST 10 ROWS ONLY;
9. 自定义查询
9.1 Top SQL 时间段
SELECT s.sql_id,
SUM(s.elapsed_time_delta) / 1000000 AS elapsed_sec,
SUM(s.cpu_time_delta) / 1000000 AS cpu_sec,
SUM(s.buffer_gets_delta) AS gets,
SUM(s.disk_reads_delta) AS reads
FROM dba_hist_sqlstat s
WHERE s.snap_id BETWEEN 100 AND 110
GROUP BY s.sql_id
ORDER BY elapsed_sec DESC FETCH FIRST 10 ROWS ONLY;
9.2 SQL 文本
SELECT sql_text FROM dba_hist_sqltext WHERE sql_id = '&sql_id';
9.3 SQL 计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('&sql_id'));
详细见:Oracle 执行计划详解。
10. AWR Warehouse
10.1 概述
- AWR 数据集中
- 多库聚合
- OEM 13c
10.2 配置
Setup → AWR Warehouse
- 添加源
- 配置同步
11. 性能影响
11.1 收集开销
- TYPICAL:低
- ALL:高
- 默认足够
11.2 空间
- SYSAUX
- 30 天保留
- 监控
12. 常见坑与排错
12.1 SYSAUX 满
SELECT occupant_name, space_usage_kbytes
FROM v$sysaux_occupants
WHERE occupant_name LIKE '%AWR%';
-- 清理
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(...);
12.2 快照失败
SELECT snap_id, error_count FROM dba_hist_snapshot WHERE error_count > 0;
-- MMON 问题
12.3 报告无数据
- snap_id 范围
- 实例
- 时间
13. 最佳实践
- STATISTICS_LEVEL = TYPICAL:默认
- 30 分钟快照:性能
- 30 天保留:历史
- Baseline:对比
- 手动快照:关键时段
- Top SQL 分析:优化
- ADDM:自治
- AWR Warehouse:集中
- 监控 SYSAUX:空间
- 定期报告:分析
14. 参考资料
[1] Oracle Database Performance Tuning Guide 19c, “AWR” https://docs.oracle.com/en/database/oracle/oracle-database/19/tgptg/