外观
DM AWR报告分析
AWR报告的主要特点
- 自动化收集:定期自动收集性能数据,无需手动干预
- 全面的性能指标:涵盖系统资源、数据库状态、SQL性能、IO操作等多个方面
- 历史数据比较:支持不同时间段的性能数据比较,便于识别性能变化趋势
- 详细的SQL分析:提供SQL执行统计、执行计划等详细信息
- 直观的报告格式:支持HTML、TEXT等多种报告格式,便于阅读和分析
AWR报告的应用场景
- 性能问题诊断:快速定位数据库性能瓶颈
- 性能趋势分析:了解数据库性能的变化趋势
- SQL优化:识别和优化低效SQL语句
- 容量规划:根据性能数据预测资源需求
- 基准测试:评估系统优化前后的性能变化
生成AWR报告
通过SQL命令生成
创建AWR快照
AWR报告基于快照数据生成,首先需要创建AWR快照:
sql
-- 创建AWR快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
-- 查看现有快照
SELECT SNAP_ID, BEGIN_TIME, END_TIME, SNAP_LEVEL
FROM DBA_HIST_SNAPSHOT
ORDER BY SNAP_ID DESC;生成AWR报告
使用GENERATE_AWR_REPORT函数生成AWR报告:
sql
-- 生成HTML格式的AWR报告
SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.GENERATE_AWR_REPORT(
l_begin_snap => 1, -- 起始快照ID
l_end_snap => 2, -- 结束快照ID
l_report_type => 'HTML' -- 报告格式:HTML或TEXT
));
-- 生成TEXT格式的AWR报告
SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.GENERATE_AWR_REPORT(1, 2, 'TEXT'));设置AWR快照参数
sql
-- 设置快照间隔(分钟)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
interval => 60, -- 快照间隔为60分钟
retention => 10080, -- 快照保留时间为7天(10080分钟)
topnsql => 10 -- 每个快照收集的TOP SQL数量
);
-- 查看当前快照设置
SELECT * FROM DBA_HIST_WR_CONTROL;通过DM管理工具生成
- 启动DM管理工具,连接到数据库实例
- 在左侧导航树中选择"性能" -> "AWR报告"
- 在右侧窗口中,设置以下参数:
- 起始快照ID和结束快照ID
- 报告格式(HTML或TEXT)
- 点击"生成报告"按钮
- 等待报告生成完成,查看或保存报告
生成AWR比较报告
AWR比较报告用于比较两个不同时间段的性能数据:
sql
-- 生成AWR比较报告
SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.GENERATE_AWR_COMPARE_REPORT(
l_dbid1 => 1234567890, -- 数据库ID1
l_bid1 => 1, -- 第一个时间段的起始快照ID
l_eid1 => 2, -- 第一个时间段的结束快照ID
l_dbid2 => 1234567890, -- 数据库ID2(通常与dbid1相同)
l_bid2 => 3, -- 第二个时间段的起始快照ID
l_eid2 => 4, -- 第二个时间段的结束快照ID
l_report_type => 'HTML'
));AWR报告结构
AWR报告包含多个主要部分,每个部分提供特定方面的性能信息:
1. 报告摘要
报告摘要提供了数据库的基本信息和关键性能指标,包括:
- 数据库名称、版本和实例名
- 报告时间范围和快照信息
- 关键性能指标:CPU使用率、内存使用、IO操作、会话数等
- 主要等待事件
- TOP SQL语句
2. 系统负载
系统负载部分展示了数据库的整体负载情况,包括:
- CPU使用率统计
- 内存使用情况
- IO操作统计
- 网络流量统计
- 事务处理能力
3. 等待事件统计
等待事件统计是AWR报告中最重要的部分之一,它展示了会话等待的主要事件类型:
- 系统级等待事件统计
- 会话级等待事件统计
- 等待事件详细信息,包括等待次数、总等待时间、平均等待时间
- 等待事件的参数信息
4. SQL统计
SQL统计部分提供了SQL语句的执行情况,包括:
- 执行次数最多的SQL
- 响应时间最长的SQL
- CPU消耗最多的SQL
- IO消耗最多的SQL
- SQL执行计划
- SQL文本
5. 会话统计
会话统计部分展示了数据库会话的相关信息:
- 活跃会话数
- 会话状态分布
- 会话资源消耗
- 会话等待事件
6. 缓存统计
缓存统计部分提供了数据库缓存的使用情况:
- 缓冲池命中率
- 共享池使用情况
- 字典缓存命中率
- 库缓存命中率
7. IO统计
IO统计部分展示了数据库的IO性能:
- 磁盘读写速率
- IO等待时间
- 数据文件IO统计
- 表空间IO统计
8. 段统计
段统计部分提供了数据库段(表、索引等)的相关信息:
- 物理读最多的段
- 物理写最多的段
- 逻辑读最多的段
- 段扫描最多的段
9. 初始化参数
初始化参数部分展示了数据库的关键配置参数:
- 内存相关参数
- IO相关参数
- 优化器相关参数
- 并行相关参数
分析AWR报告
1. 从报告摘要开始
首先查看报告摘要,了解数据库的基本情况和关键性能指标:
- 检查数据库版本和实例状态
- 查看报告时间范围,确认是否覆盖了性能问题发生的时间段
- 关注关键性能指标的异常值
- 注意主要等待事件和TOP SQL
2. 分析系统负载
- CPU使用率:如果CPU使用率持续过高(>80%),可能存在CPU瓶颈
- 内存使用:检查SGA和PGA的使用情况,是否存在内存不足
- IO操作:分析IOPS和吞吐量,识别IO瓶颈
- 事务处理:比较事务数和响应时间,评估系统吞吐量
3. 分析等待事件
等待事件是性能分析的核心,通过分析等待事件可以识别系统瓶颈:
按等待时间排序:优先关注总等待时间最长的等待事件
分析等待事件类别:
- IO等待:通常与磁盘性能有关
- CPU等待:可能存在CPU瓶颈或SQL优化问题
- 锁等待:可能存在死锁或锁竞争
- 网络等待:可能存在网络延迟
- 应用等待:可能是应用程序设计问题
常见等待事件及解决方法:
DB FILE SEQ READ:顺序读等待,可能需要优化SQL或增加索引DB FILE SCATTER READ:分散读等待,可能需要优化全表扫描DIRECT PATH READ:直接路径读,可能需要调整PGA大小ENQUEUE:锁等待,可能需要优化并发访问或调整事务隔离级别CPU TIME:CPU等待,可能需要优化SQL或增加CPU资源
4. 分析SQL统计
SQL统计部分可以帮助识别低效SQL:
- 按执行时间排序:找出响应时间最长的SQL
- 按执行次数排序:找出执行频率最高的SQL
- 查看执行计划:分析SQL的执行计划,识别性能瓶颈
- 检查SQL文本:分析SQL的逻辑,优化查询条件
- 关注资源消耗:查看SQL的CPU、IO、内存消耗
5. 分析缓存统计
缓存统计可以帮助优化内存配置:
- 缓冲池命中率:理想情况下应大于95%,否则可能需要增加缓冲池大小
- 共享池命中率:理想情况下应大于99%,否则可能需要增加共享池大小或优化SQL
- 字典缓存命中率:理想情况下应大于95%,否则可能需要增加字典缓存大小
6. 分析IO统计
IO统计可以帮助识别存储瓶颈:
- 磁盘读写速率:与存储设备的理论性能比较,评估IO性能
- IO等待时间:高IO等待时间可能表明存储设备性能不足
- 数据文件IO分布:识别IO热点文件,考虑将其分布到不同磁盘
7. 分析段统计
段统计可以帮助优化表和索引设计:
- 物理读最多的段:考虑优化访问这些段的SQL,或增加索引
- 物理写最多的段:考虑优化写入操作,或调整存储参数
- 段扫描最多的段:考虑增加索引,减少全表扫描
AWR报告分析最佳实践
1. 定期生成AWR报告
- 建议每天生成一次AWR报告,用于日常性能监控
- 在性能问题发生时,生成问题时间段的AWR报告
- 系统优化前后生成AWR报告,用于评估优化效果
2. 比较不同时间段的AWR报告
- 将当前AWR报告与历史报告进行比较,识别性能变化趋势
- 关注关键指标的异常变化,如CPU使用率、等待事件分布、SQL响应时间
- 使用AWR比较报告功能,自动比较两个时间段的性能数据
3. 结合其他性能工具
- 将AWR报告与DM性能监控工具结合使用,获得更全面的性能视图
- 使用SQL执行计划工具分析复杂SQL
- 结合操作系统监控工具,分析系统级瓶颈
4. 关注长期趋势
- 收集至少一周的AWR报告,分析性能趋势
- 识别周期性性能问题,如每周或每月的性能下降
- 根据趋势预测未来资源需求,进行容量规划
5. 建立性能基准
- 系统正常运行时,生成AWR报告作为性能基准
- 当性能下降时,将当前报告与基准报告比较,识别差异
- 定期更新性能基准,适应业务变化
6. 关注细节
- 仔细分析SQL执行计划,识别低效操作
- 注意等待事件的参数信息,理解等待的具体原因
- 检查初始化参数设置,确认是否符合最佳实践
- 关注段统计,识别热点表和索引
版本差异说明
| 版本 | 主要变化 |
|---|---|
| DM 7 | 基础AWR功能,支持快照创建和报告生成 |
| DM 8 | 增强了AWR功能,支持更多性能指标和报告格式 |
| DM 8.1 | 优化了AWR报告的生成性能,增加了更多分析功能 |
常见问题(FAQ)
Q1: AWR报告中的"Elapsed Time"和"DB Time"有什么区别?
A1: "Elapsed Time"是报告涵盖的实际时间(墙钟时间),而"DB Time"是所有会话在数据库中消耗的总时间。如果"DB Time"远大于"Elapsed Time",说明数据库存在较高的并发负载。
Q2: 如何确定AWR报告的合适时间范围?
A2: AWR报告的时间范围应根据具体情况确定:
- 日常监控:建议1-2小时
- 性能问题诊断:覆盖问题发生的时间段,通常30分钟-1小时
- 趋势分析:可以是一天或一周
Q3: 如何优化AWR报告生成性能?
A3: 可以通过以下方法优化AWR报告生成性能:
- 合理设置快照间隔,避免过于频繁的快照
- 限制快照保留时间,定期清理过期快照
- 减少每个快照收集的TOP SQL数量
- 在非高峰期生成AWR报告
Q4: 如何解读等待事件的"Avg Wait"值?
A4: "Avg Wait"是平均等待时间(毫秒),不同等待事件的合理值不同:
- IO等待事件:通常应小于10毫秒
- CPU等待事件:通常应小于5毫秒
- 锁等待事件:通常应小于1毫秒
如果平均等待时间超过合理值,可能存在性能问题。
Q5: 如何使用AWR报告优化SQL语句?
A5: 使用AWR报告优化SQL的步骤:
- 在SQL统计部分找出性能问题最严重的SQL
- 查看SQL执行计划,识别低效操作
- 分析SQL文本,优化查询条件
- 检查相关表的索引情况,考虑添加或修改索引
- 调整SQL语句结构,如重写子查询、使用绑定变量等
- 优化后重新生成AWR报告,验证优化效果
Q6: 如何清理过期的AWR快照?
A6: 可以使用以下方法清理过期的AWR快照:
sql
-- 删除指定快照范围
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
l_low_snap_id => 1,
l_high_snap_id => 100
);
-- 调整快照保留时间
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 4320 -- 保留时间改为3天(4320分钟)
);Q7: AWR报告中的"Buffer Pool Hit Ratio"应该达到多少?
A7: 理想情况下,缓冲池命中率应大于95%。如果命中率低于90%,可能需要增加缓冲池大小或优化SQL语句,减少物理读操作。
Q8: 如何识别IO瓶颈?
A8: 可以通过以下方法识别IO瓶颈:
- 查看等待事件,关注IO相关等待事件(如
DB FILE SEQ READ、DB FILE SCATTER READ) - 分析IO统计,查看磁盘读写速率和IO等待时间
- 比较IO性能与存储设备的理论性能
- 查看数据文件IO分布,识别IO热点
Q9: 如何使用AWR报告进行容量规划?
A9: 使用AWR报告进行容量规划的步骤:
- 收集至少一个月的AWR报告
- 分析关键性能指标的变化趋势,如CPU使用率、内存使用、IO操作、事务数
- 根据业务增长预测,计算未来资源需求
- 考虑峰值负载情况,预留适当的资源余量
- 制定容量扩展计划
Q10: 如何导出AWR报告?
A10: 可以通过以下方法导出AWR报告:
- 生成HTML格式的AWR报告,保存为文件
- 生成TEXT格式的AWR报告,保存为文件
- 使用DM管理工具导出AWR报告
- 使用SQL*Plus的SPOOL命令导出AWR报告
建议DBA定期生成AWR报告,建立性能基准,关注性能趋势,及时优化数据库配置和SQL语句,确保数据库系统高效稳定运行。
