在Linux环境下进行数据库性能调优时,AWR(Automatic Workload Repository)报告是不可或缺的工具,AWR报告由Oracle数据库自动生成,提供了详细的系统性能数据,包括负载概况、SQL执行统计、等待事件分析等,帮助DBA快速定位性能瓶颈,本文将详细介绍在Linux系统中生成AWR报告的完整流程、关键步骤及注意事项,并辅以实例说明,确保内容清晰易懂且实用。

AWR报告生成的前提条件
在Linux系统中生成AWR报告前,需满足以下基本条件:
- 数据库版本:Oracle Database 10g Release 2(10.2)或更高版本。
- 权限配置:用户需具有
DBA角色或SELECT_CATALOG_ROLE角色权限,否则无法访问AWR数据字典视图。 - AWR数据保留:确保数据库的
retention参数设置合理,默认为7天,可通过DBA_HIST_WR_CONTROL视图检查。
生成AWR报告的两种方式
使用Oracle SQL*Plus直接生成
通过SQL*Plus连接数据库后,调用DBMS_WORKLOAD_REPOSITORY包中的AWR_REPORT_HTML或AWR_REPORT_TEXT函数生成报告,以下是HTML格式报告的示例脚本:
SET LONG 1000000
SET PAGESIZE 0
SET LINESIZE 1000
SELECT
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(
l_dbid => 1234567890,
l_inst_num => 1,
l_bid => 1000,
l_eid => 2000
) AS awr_report
FROM dual;
执行后,将输出结果保存为.html文件,用浏览器打开即可查看。
使用Oracle Enterprise Manager(OEM)
对于不熟悉SQL的用户,可通过OEM图形化界面生成AWR报告:

- 登录OEM控制台,进入“性能”菜单。
- 选择“AWR报告”选项,指定报告的起始和结束时间。
- 点击“生成报告”,系统将自动生成并下载HTML或PDF格式文件。
自动化AWR报告生成的脚本实践
在Linux环境中,可通过Shell脚本结合SQL*Plus实现自动化报告生成,以下是一个示例脚本:
#!/bin/bash
# 定义数据库连接信息
ORACLE_SID="ORCL"
ORACLE_USER="sys/oracle as sysdba"
OUTPUT_DIR="/home/oracle/awr_reports"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建输出目录
mkdir -p $OUTPUT_DIR
# 生成AWR报告
sqlplus -s $ORACLE_USER <<EOF
SET LONG 1000000
SET PAGESIZE 0
SET LINESIZE 1000
SPOOL $OUTPUT_DIR/awr_report_${DATE}.html
SELECT DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(
l_dbid => (SELECT dbid FROM v$database),
l_inst_num => 1,
l_bid => (SELECT MIN(snap_id) FROM dba_hist_snapshot WHERE end_time >= SYSDATE-1),
l_eid => (SELECT MAX(snap_id) FROM dba_hist_snapshot WHERE end_time <= SYSDATE)
) FROM dual;
SPOOL OFF
EXIT;
EOF
echo "AWR report generated at $OUTPUT_DIR/awr_report_${DATE}.html"
将脚本保存为generate_awr.sh,赋予执行权限后运行即可。
AWR报告关键指标解读
AWR报告包含多个章节,以下为常见核心指标及分析要点:
| 指标类别 | 关键指标 | 分析要点 |
|---|---|---|
| 负载概况 | DB Time | 若接近或超过数据库运行时间,表明存在严重性能瓶颈。 |
| SQL执行统计 | Executions/s | 高频执行的SQL需重点关注,尤其是逻辑读较高的语句。 |
| 等待事件 | Top 5 Wait Events | 关注“db file sequential read”等I/O相关事件,可能涉及索引优化问题。 |
| 实例效率 | Soft Parse % | 若低于95%,需减少硬解析,绑定变量或增加共享池大小。 |
常见问题及解决方案
-
问题:生成AWR报告时提示“insufficient privileges”。
解决:确保用户具有DBA角色,或授予SELECT ANY DICTIONARY权限。
-
问题:AWR报告显示“no data found”。
解决:检查retention参数是否过短,或指定的时间范围内无快照数据。
相关问答FAQs
Q1:如何调整AWR报告的保留时间?
A1:可通过DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS包修改,例如将保留期设置为30天:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 30*24*60 -- 30天(分钟)
);
Q2:能否将AWR报告导出为CSV格式?
A2:AWR报告本身不直接支持CSV,但可通过解析HTML中的表格或使用DBA_HIST_*视图导出数据,再借助外部工具(如Python的Pandas库)转换为CSV格式。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/62030.html