在 Oracle 数据库中生成 AWR(Automatic Workload Repository,自动工作负载仓库)报告,最常用的方法就是调用系统自带的命令行脚本。这份报告是进行数据库性能分析、瓶颈定位与故障诊断的核心工具。生成流程并不复杂,主要分为三个关键步骤:确认用户权限、执行脚本命令、设定分析范围。下面将为你详细拆解每个环节。
一、登录数据库环境
首先,你需要使用具备足够权限的数据库管理员账户登录到数据库所在的服务器,并成功连接至数据库实例。
打开终端窗口,输入以下命令先切换到 Oracle 专用用户(通常为 oracle),随后通过 sqlplus 以 sysdba 身份登录系统:
# 切换到 oracle 用户 (通常为 oracle) su - oracle # 以 sysdba 身份登录 sqlplus / as sysdba
二、执行 AWR 报告生成脚本
登录成功后,直接运行 Oracle 内置的报告生成脚本 awrrpt.sql。该脚本将以交互式方式引导你完成后续所有配置。
SQL> @?/rdbms/admin/awrrpt.sql
命令说明:@ 表示执行指定的 SQL 脚本文件,? 是 $ORACLE_HOME 路径的快捷写法。该命令能够精确定位并执行位于 Oracle 安装目录下的 AWR 报告生成脚本。
三、选择报告类型与时间范围
脚本启动后,系统会提示你完成几个简单选项,只需根据实际需求输入即可。
3.1. 选择报告输出格式
Enter value for report_type: html
1.html:生成HTML格式,可视化界面更友好,推荐选择
2.text:生成纯文本格式。
3.2. 选择快照时间范围(核心步骤)
AWR 报告基于快照(Snapshot)来记录和呈现性能数据。你需要选定一个起始快照和一个结束快照的 ID,报告将展示这两个时间节点之间的数据库性能状况。
系统会列出近期可用的快照及其对应的时间信息,示例如下:
Snap Instance Snap Started -------- ------------ ----------------------- 123 ORCL 09 Apr 2026 10:00 124 ORCL 09 Apr 2026 11:00 125 ORCL 09 Apr 2026 12:00
设定起始时间:输入你要分析的时间段所对应的起始快照 ID,例如 124
设定结束时间:输入结束快照 ID,例如 125
注意事项:AWR 默认以每小时一次的频率自动生成快照。如果你的数据库实例为新安装,可能需要等待一段时间,待快照积累足够后,才能生成有分析价值的报告。
3.3. 指定 AWR 报告文件名
Enter value for report_name: awr_report_20260409.html
完整操作示例:
[oracle@rac01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 9 14:41:40 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> @?/rdbms/admin/awrrpt.sql
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
AWR reports can be generated in the following formats. Please enter the
name of the format at the prompt. Default value is 'html'.
'html' HTML format (default)
'text' Text format
'active-html' Includes Performance Hub active report
Enter value for report_type: html
old 1: select 'Type Specified: ',lower(nvl('&&report_type','html')) report_type from dual
new 1: select 'Type Specified: ',lower(nvl('html','html')) report_type from dual
Type Specified: html
old 1: select '&&report_type' report_type_def from dual
new 1: select 'html' report_type_def from dual
old 1: select '&&view_loc' view_loc_def from dual
new 1: select 'AWR_PDB' view_loc_def from dual
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance Container Name
-------------- -------------- -------------- -------------- --------------
1747225139 ORCL 1 orcl orcl
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ ---------- --------- ---------- ------
* 1747225139 1 ORCL orcl rac01.exampl
Using 1747225139 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.
Enter value for num_days: 1
Listing the last day's Completed Snapshots
Instance DB Name Snap Id Snap Started Snap Level
------------ ------------ ---------- ------------------ ----------
orcl ORCL 57 09 Apr 2026 12:56 1
58 09 Apr 2026 14:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 57
Begin Snapshot Id specified: 57
Enter value for end_snap: 58
End Snapshot Id specified: 58
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_57_58.html. To use this name,
press to continue, otherwise enter an alternative.
Enter value for report_name: awr_report_20260409.html
Using the report name awr_report_20260409.html
AWR Report for DB: ORCL, Inst: orcl, Snaps: 57-58
....................................
End of Report
Report written to awr_report_20260409.html
SQL>
四、获取报告文件
完成上述所有选择后,脚本会自动生成 AWR 报告,并保存到当前登录会话所在的操作系统目录下。

你可以在当前 sqlplus 会话对应的路径下找到生成的报告文件(例如 awr_report_20260409.html)。使用 ls 命令确认文件存在后,借助远程传输工具将其下载到本地,再用浏览器打开即可查看详细的性能分析数据。


五、分析AWR性能报告
5.1. AWR 报告分析入门:五步法
分析一份包含实际负载的 AWR 报告,通常可以遵循以下五个核心步骤。这套方法可以灵活应用到后续任何数据库性能分析场景中。
Elapsed:消耗

parse:解析

第一步:看整体负载 —— “数据库忙不忙?”
- 核心指标:DB Time
- 位置:报告开头的 Snapshot 信息表以及 Load Profile 区域。

分析方法:
DB Time 表示数据库在处理用户请求时所消耗的总时间。将该值除以 Elapsed Time(即快照覆盖的时间段长度),即可计算出平均活动会话数。
- 平均活动会话 = DB Time / Elapsed Time
- 举例说明:若 DB Time = 100 分钟,Elapsed Time = 10 分钟,则表明平均有 10 个会话在并发执行工作。
在当前这份报告示例中:DB Time = 0,平均活动会话 = 0。由此可判断数据库处于完全空闲状态。
第二步:看等待事件 —— “瓶颈在哪里?”
- 核心区域:Top 10 Foreground Events by Total Wait Time
- 位置:Main Report → Wait Events Statistics → Top 10 Foreground Events...

- 分析方法:该区域列出了消耗数据库时间最多的各类“等待事件”。通过分析等待事件的类型,可以快速定位性能瓶颈。
- CPU 相关:若 DB CPU 排名首位且占比极高(例如 > 90%),说明系统主要在高效运算,而非等待其他资源。
- I/O 相关:出现 db file sequential read 或 scattered read,往往提示磁盘 I/O 可能存在瓶颈。
- 并发相关:例如 buffer busy waits,表明存在热点数据块的争用问题。
- 网络或配置相关:例如 log file sync,可能暗示日志写入环节存在延迟。
- 针对这份报告:仅出现 DB CPU 和 ADR block file read 等少量事件,且等待时间(Wait Time)均为 0,说明不存在具有参考价值的等待事件。
第三步:看 SQL 统计 —— “是哪些 SQL 在消耗资源?”
- 核心区域:SQL Statistics
- 位置:Main Report → SQL Statistics → 重点关注 SQL ordered by Elapsed Time 和 SQL ordered by CPU Time。



- 分析方法:该区域会列出资源消耗排名靠前的 SQL 语句。
- 重点关注 Elapsed Time (s)、CPU Time (s)、Executions(执行次数)以及 Buffer Gets(逻辑读次数)。
- 寻找“高成本”SQL:单次执行耗时极长的,或者执行频率非常高的语句。
- 记录下相关 SQL Id,随后可以在数据库中利用 DBMS_SQLTUNE 包或查看执行计划进行深度优化。
- 当前报告显示:虽然存在数据,但 Elapsed Time 均远小于 1 秒,%Total 百分比异常偏高是由于总 DB Time 为 0 所导致的。因此不存在需要特别优化的 SQL 语句。
第四步:看时间模型 —— “时间都花在哪儿了?”
- 核心区域:Time Model Statistics
- 位置:Main Report → Wait Events Statistics → Time Model Statistics。

- 分析方法:该区域展示了数据库时间在前台(DB Time)与后台(background time)的分布情况,以及具体花费在 SQL 解析、硬解析等环节的时间占比。
- 重点关注 parse time elapsed 占 DB Time 的比例。若该比例过高(例如超过 10%),则提示可能存在解析效率问题。
- hard parse elapsed time 占比过高,通常意味着未使用绑定变量,导致游标缓存频繁失效。
第五步:看操作系统和内存 —— “硬件资源够不够?”
- 核心区域:Host CPU 和 Memory Statistics
- 位置:Main Report → Report Summary 和 Memory Statistics。

分析方法:
- CPU:观察 Load Average(系统平均负载)是否超出逻辑 CPU 的总数量。当前服务器拥有 2 个 CPU,Load Average 仅为 0.3 左右,负载极低。
- 内存:查看 Memory Statistics 中 %Host Mem used for SGA + PGA 的占比,并留意是否存在大量换页操作(报告中未显示,可结合操作系统层面进一步确认)。
- 针对该报告:CPU 和内存资源均十分充裕,无硬件资源瓶颈。
