Skip to content

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管理工具生成

  1. 启动DM管理工具,连接到数据库实例
  2. 在左侧导航树中选择"性能" -> "AWR报告"
  3. 在右侧窗口中,设置以下参数:
    • 起始快照ID和结束快照ID
    • 报告格式(HTML或TEXT)
  4. 点击"生成报告"按钮
  5. 等待报告生成完成,查看或保存报告

生成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的步骤:

  1. 在SQL统计部分找出性能问题最严重的SQL
  2. 查看SQL执行计划,识别低效操作
  3. 分析SQL文本,优化查询条件
  4. 检查相关表的索引情况,考虑添加或修改索引
  5. 调整SQL语句结构,如重写子查询、使用绑定变量等
  6. 优化后重新生成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 READDB FILE SCATTER READ
  • 分析IO统计,查看磁盘读写速率和IO等待时间
  • 比较IO性能与存储设备的理论性能
  • 查看数据文件IO分布,识别IO热点

Q9: 如何使用AWR报告进行容量规划?

A9: 使用AWR报告进行容量规划的步骤:

  1. 收集至少一个月的AWR报告
  2. 分析关键性能指标的变化趋势,如CPU使用率、内存使用、IO操作、事务数
  3. 根据业务增长预测,计算未来资源需求
  4. 考虑峰值负载情况,预留适当的资源余量
  5. 制定容量扩展计划

Q10: 如何导出AWR报告?

A10: 可以通过以下方法导出AWR报告:

  • 生成HTML格式的AWR报告,保存为文件
  • 生成TEXT格式的AWR报告,保存为文件
  • 使用DM管理工具导出AWR报告
  • 使用SQL*Plus的SPOOL命令导出AWR报告

建议DBA定期生成AWR报告,建立性能基准,关注性能趋势,及时优化数据库配置和SQL语句,确保数据库系统高效稳定运行。