内容大纲
内容简介:本文主要介绍Oracle数据库的自动工作负载仓库(AWR)管理,包括AWR的配置、使用、分析和管理。风哥教程参考Oracle官方文档AWR相关内容,为生产环境提供完整的AWR管理解决方案。
Part01-基础概念与理论知识
1.1 AWR概念
Oracle自动工作负载仓库(AWR)是Oracle数据库自动收集和存储性能数据的工具,它会定期收集数据库的性能统计信息,包括SQL执行情况、系统资源使用情况、等待事件等,并将这些数据存储在数据仓库中,供性能分析和诊断使用。AWR是Oracle数据库性能调优的重要工具,能够提供全面的性能数据,帮助DBA快速定位性能问题。
1.2 AWR功能
- 性能数据收集:定期收集数据库的性能统计信息
- 性能数据存储:将性能数据存储在数据仓库中
- 性能报告生成:生成AWR报告,用于性能分析
- 性能趋势分析:分析性能数据的趋势
- 性能问题诊断:帮助诊断性能问题
1.3 AWR使用方法
- DBMS_WORKLOAD_REPOSITORY包:通过PL/SQL包管理AWR
- Enterprise Manager:通过EM控制台管理AWR
- SQL*Plus:通过SQL*Plus生成AWR报告
Part02-生产环境规划与建议
2.1 AWR管理规划
制定合理的AWR管理规划:
- 配置AWR快照间隔和保留时间
- 制定AWR报告生成计划
- 建立AWR数据管理的流程和规范
- 定期分析AWR报告
- 跟踪AWR管理的效果
2.2 AWR建议
AWR建议:
- 根据数据库负载情况调整AWR快照间隔
- 根据存储空间情况调整AWR保留时间
- 定期生成AWR报告,分析数据库性能
- 结合其他性能工具,全面分析数据库性能
- 建立AWR报告分析的标准流程
2.3 AWR管理结果管理
AWR管理结果管理建议:
- 保存AWR报告,用于后续分析和参考
- 建立AWR报告分析的审核机制
- 跟踪性能问题的解决情况
- 分析性能趋势,预测潜在问题
- 与开发团队分享AWR分析结果,提高应用程序性能
Part03-生产环境项目实施方案
3.1 AWR配置与管理
SQL> SELECT * FROM dba_hist_wr_control;
# 2. 修改AWR快照间隔(分钟)和保留时间(天)
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 7*24*60, — 7天
interval => 60, — 60分钟
topnsql => 100 — 每个快照收集的SQL数量
);
# 3. 手动创建AWR快照
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
# 4. 删除AWR快照
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
low_snap_id => 100,
high_snap_id => 110
);
# 5. 生成AWR报告
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
# 输入报告类型:html
# 输入开始快照ID:110
# 输入结束快照ID:114
# 输入报告名称:/oracle/reports/awr_20260403.html
3.2 AWR报告分析
# – 数据库概览:数据库版本、主机信息、快照信息
# – 负载配置文件:事务量、SQL执行次数、逻辑读等
# – 实例效率百分比:缓存命中率、软解析率等
# – 等待事件:主要等待事件及占比
# – SQL统计:Top SQL语句
# – 段统计:Top段的逻辑读、物理读等
# – 实例统计:CPU使用率、内存使用等
# 2. 分析AWR报告的关键指标
# – 缓存命中率:应大于95%
# – 软解析率:应大于90%
# – 主要等待事件:识别瓶颈
# – Top SQL:识别消耗资源最多的SQL
# – 段统计:识别热点段
# 3. 生成AWR比较报告
SQL> @$ORACLE_HOME/rdbms/admin/awrddrpt.sql
# 输入报告类型:html
# 输入第一个快照范围的开始ID:110
# 输入第一个快照范围的结束ID:114
# 输入第二个快照范围的开始ID:115
# 输入第二个快照范围的结束ID:119
# 输入报告名称:/oracle/reports/awr_compare_20260403.html
3.3 AWR数据管理
SQL> SELECT snap_id, dbid, instance_number, begin_interval_time, end_interval_time
FROM dba_hist_snapshot
ORDER BY snap_id DESC;
# 2. 查看AWR基线
SQL> SELECT baseline_id, baseline_name, creation_time, expiration, snap_id, snap_id
FROM dba_hist_baseline
ORDER BY creation_time DESC;
# 3. 创建AWR基线
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
start_snap_id => 110,
end_snap_id => 114,
baseline_name => ‘BASELINE_20260403’,
expiration => 30 — 30天
);
# 4. 删除AWR基线
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(
baseline_name => ‘BASELINE_20260403’
);
# 5. 导出AWR数据
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.EXPORT_AWR(
dpump_dir => ‘DATA_PUMP_DIR’,
file_name => ‘awr_export.dmp’,
bid => 110,
eid => 114
);
# 6. 导入AWR数据
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.IMPORT_AWR(
dpump_dir => ‘DATA_PUMP_DIR’,
file_name => ‘awr_export.dmp’
);
3.4 AWR管理结果管理
# 将AWR报告保存到指定目录,用于后续分析和参考
# 2. 建立AWR报告分析的审核机制
# 定期审核AWR报告,确保性能问题得到及时解决
# 3. 跟踪性能问题的解决情况
# 记录性能问题的解决过程和结果
# 4. 分析性能趋势
# 定期比较AWR报告,分析性能趋势
# 5. 与开发团队分享AWR分析结果
# 提供AWR分析结果给开发团队,帮助优化应用程序
Part04-生产案例与实战讲解
4.1 AWR配置与管理实战
$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Apr 3 21:00:00 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
# 2. 查看当前AWR配置
SQL> SELECT * FROM dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
———- ———————————– ———————————– ———-
1234567890 +00000 01:00:00.000000000 +00007 00:00:00.000000000 100
# 3. 修改AWR配置
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 14*24*60, — 14天
interval => 30, — 30分钟
topnsql => 200 — 每个快照收集的SQL数量
);
PL/SQL procedure successfully completed.
# 4. 验证AWR配置
SQL> SELECT * FROM dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
———- ———————————– ———————————– ———-
1234567890 +00000 00:30:00.000000000 +00014 00:00:00.000000000 200
# 5. 手动创建AWR快照
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
PL/SQL procedure successfully completed.
# 6. 查看快照信息
SQL> SELECT snap_id, begin_interval_time, end_interval_time
FROM dba_hist_snapshot
ORDER BY snap_id DESC
FETCH FIRST 5 ROWS ONLY;
SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME
———- ——————– ——————–
115 2026-04-03 21:05:00 2026-04-03 21:05:01
114 2026-04-03 21:00:00 2026-04-03 21:00:01
113 2026-04-03 20:30:00 2026-04-03 20:30:01
112 2026-04-03 20:00:00 2026-04-03 20:00:01
111 2026-04-03 19:30:00 2026-04-03 19:30:01
4.2 AWR报告生成与分析实战
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DBID DB_NAME INST_HOST INST_NAME
———- ——— ——————– ——————–
1234567890 FGEDUDB fgedu-server fgedudb1
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a text report?
Enter ‘html’ for an HTML report, or ‘text’ for text:
html
Type Specified: html
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DBID INSTANCE HOST
———- ———— ——————–
* 1234567890 fgedudb1 fgedu-server
Using 1234567890 for database Id
Using fgedudb1 for instance Id
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
specifying a number lists all completed snapshots.
Enter value for num_days: 1
Listing the last day’s Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
———— ———— ——— —————— —– ————
fgedudb1 FGEDUDB 111 03 Apr 2026 19:30 1
112 03 Apr 2026 20:00 1
113 03 Apr 2026 20:30 1
114 03 Apr 2026 21:00 1
115 03 Apr 2026 21:05 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 111
Begin Snapshot Id specified: 111
Enter value for end_snap: 115
End Snapshot Id specified: 115
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_111_115.html.
To use this name, press
Enter value for report_name: /oracle/reports/awr_20260403.html
Using the report name /oracle/reports/awr_20260403.html
# 2. 分析AWR报告
# 查看AWR报告的主要部分:
– 数据库概览:
DB Name DB Id Instance Inst num Startup Time Release RAC
———— ———– ———— ——– ————— ———– —
FGEDUDB 1234567890 fgedudb1 1 03-Apr-26 18:00 19.3.0.0.0 NO
– 负载配置文件:
Snapshots Begin End
——— ——— ———
111 115 03-Apr-26 19:30 03-Apr-26 21:05
Interval: 30.0 minutes
DB Time: 45.6 minutes
DB CPU: 22.8 minutes
Redo Size: 10.2 MB
Logical Reads: 1,234,567
SQL Executions: 12,345
– 实例效率百分比:
Buffer Nowait %: 99.99
Buffer Hit %: 95.67
Library Hit %: 92.34
Soft Parse %: 98.76
Execute to Parse %: 85.43
Latch Hit %: 99.99
Parse CPU to Parse Elapsd %: 90.12
– 主要等待事件:
Event Waits Time(s) Avg Wait(ms) % DB Time Wait Class
—————- —— ——- ———— ——- ———-
db file sequential read 12345 678 55 15.0 User I/O
db file scattered read 9876 543 55 12.0 User I/O
log file sync 4321 321 74 7.0 Commit
– Top SQL:
SQL Id Plan Hash Executions Elapsed Time (s) CPU Time (s) Buffer Gets
————- ———- ———— ————– ———– ————
1234567890abc 1234567890 1000 123.45 67.89 1234567
2345678901def 2345678901 500 87.65 45.32 987654
– 段统计:
Owner Object Name Object Type Logical Reads Physical Reads
—— —————— ———— ————- —————
FGEDU FGEDU_ORDERS TABLE 1234567 123456
FGEDU IDX_FGEDU_ORDERS INDEX 987654 98765
4.3 AWR基线管理实战
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
start_snap_id => 111,
end_snap_id => 115,
baseline_name => ‘BASELINE_20260403’,
expiration => 30 — 30天
);
PL/SQL procedure successfully completed.
# 2. 查看AWR基线
SQL> SELECT baseline_id, baseline_name, creation_time, expiration, start_snap_id, end_snap_id
FROM dba_hist_baseline
ORDER BY creation_time DESC;
BASELINE_ID BASELINE_NAME CREATION_TIME EXPIRATION START_SNAP_ID END_SNAP_ID
———– ——————– ——————– ———- ———— ———-
1 BASELINE_20260403 2026-04-03 21:10:00 30 111 115
# 3. 生成AWR比较报告(与基线比较)
SQL> @$ORACLE_HOME/rdbms/admin/awrddrpt.sql
# 选择与基线比较
# 4. 删除AWR基线
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(
baseline_name => ‘BASELINE_20260403’
);
PL/SQL procedure successfully completed.
# 5. 验证AWR基线已删除
SQL> SELECT baseline_id, baseline_name, creation_time, expiration, start_snap_id, end_snap_id
FROM dba_hist_baseline
ORDER BY creation_time DESC;
no rows selected
Part05-风哥经验总结与分享
5.1 AWR管理最佳实践
- 合理配置:根据数据库负载情况调整AWR快照间隔和保留时间
- 定期分析:定期生成和分析AWR报告,及时发现性能问题
- 建立基线:创建AWR基线,用于性能比较和趋势分析
- 保存报告:保存AWR报告,用于后续分析和参考
- 持续监控:持续监控数据库性能,及时发现新问题
5.2 AWR管理注意事项
- 确保AWR有足够的存储空间
- 根据数据库负载情况调整AWR快照间隔
- 定期清理过期的AWR数据,释放存储空间
- 结合其他性能工具,全面分析数据库性能
- 与开发团队分享AWR分析结果,提高应用程序性能
5.3 AWR管理建议
- 建立AWR管理流程,定期执行AWR配置和分析
- 培训DBA,提高AWR报告分析能力
- 建立AWR报告分析的标准流程
- 跟踪性能问题的解决情况
- 与Oracle支持团队保持沟通,获取AWR管理的最佳实践
更多视频教程www.fgedu.net.cn
更多学习教程公众号风哥教程itpux_com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
