Skip to content

Oracle AWR/ASH 报告解读

概述

Oracle数据库提供了强大的性能监控和分析工具,其中AWR(Automatic Workload Repository)和ASH(Active Session History)是最常用的性能分析工具之一。通过解读AWR和ASH报告,可以深入了解数据库的性能状况,识别性能瓶颈,进行针对性的优化。

  • AWR报告:定期收集数据库的性能统计信息,生成详细的性能报告,包含系统级和SQL级的性能数据
  • ASH报告:实时收集活动会话的等待事件信息,提供更细粒度的性能分析,适合分析短期性能问题

AWR 报告解读

1. AWR 报告生成

1.1 手动生成 AWR 报告

sql
-- 登录SQL*Plus,连接到目标数据库
sqlplus / as sysdba

-- 生成AWR报告
@?/rdbms/admin/awrrpt.sql

-- 选择报告格式(html或text)
Enter value for report_type: html

-- 选择快照范围
Enter value for num_days: 7

-- 选择起始快照ID
Enter value for begin_snap:

-- 选择结束快照ID
Enter value for end_snap:

-- 输入报告文件名
Enter value for report_name:
oracle_awr_report.html

1.2 生成指定实例的 AWR 报告

sql
-- 生成指定实例的AWR报告
@?/rdbms/admin/awrrpti.sql

-- 输入数据库ID
Enter value for dbid:

-- 输入实例ID
Enter value for inst_num:

-- 选择报告格式
Enter value for report_type: html

-- 选择快照范围
Enter value for num_days: 7

-- 选择起始和结束快照ID
Enter value for begin_snap:
Enter value for end_snap:

-- 输入报告文件名
Enter value for report_name:
oracle_awr_report_inst1.html

2. AWR 报告关键部分解读

2.1 报告头信息

AWR报告的开头部分包含基本信息:

  • 数据库名称、版本、ID
  • 实例名称、主机名
  • 快照起始时间和结束时间
  • 报告生成时间
  • 快照持续时间
  • DB Time和Elapsed Time

关键指标

  • DB Time:数据库处理用户请求所花费的总时间(包括CPU时间和等待时间)
  • Elapsed Time:快照的实际持续时间
  • DB Time/Elapsed Time:数据库的忙碌程度,比值大于1表示数据库过载

2.2 负载概要信息

指标名称描述19c/21c差异
DB Time数据库总处理时间21c优化了DB Time计算,更准确反映实际负载
Sessions平均活跃会话数21c支持更高并发,正常范围更大
Transactions事务数无明显差异
Logons登录次数无明显差异
ExecutionsSQL执行次数无明显差异
ParsesSQL解析次数21c优化了解析,软解析率更高
Hard Parses硬解析次数21c优化了共享池管理,硬解析率更低
Buffer Gets逻辑读次数无明显差异
Disk Reads物理读次数21c优化了I/O,物理读次数减少
Redo Size重做日志大小无明显差异
Block Changes数据块变更次数无明显差异
Physical Writes物理写次数21c优化了I/O,物理写次数减少

2.3 实例效率百分比

指标名称描述正常范围19c/21c差异
Buffer Nowait %缓冲区无等待获取百分比> 99%21c优化了缓冲区管理,百分比更高
Buffer Hit %缓冲区命中率> 95%无明显差异
Library Hit %共享池命中率> 95%21c优化了共享池,命中率更高
Redo NoWait %重做日志无等待获取百分比> 99%无明显差异
In-memory Sort %内存排序百分比> 95%21c优化了排序,内存排序率更高
Soft Parse %软解析百分比> 90%21c优化了解析,软解析率更高
Execute to Parse %执行解析比> 90%21c优化了解析,比值更高
Latch Hit %闩锁命中率> 99%无明显差异
Parse CPU to Parse Elapsd %解析CPU时间占比> 70%21c优化了解析,CPU利用率更高

2.4 等待事件统计

等待事件是AWR报告中最重要的部分之一,显示了数据库的主要等待类型:

等待事件类别常见等待事件可能原因优化建议
I/O等待db file sequential read, db file scattered read, direct path read/write存储性能问题、SQL优化不足、索引缺失优化存储、SQL调优、添加索引
并发等待enq: TX - row lock contention, enq: TM - index contention, latch free锁竞争、闩锁竞争、并发过高优化应用逻辑、减少锁持有时间、调整闩锁参数
内存等待free buffer waits, buffer busy waits, library cache pinSGA不足、共享池争用、内存配置不当调整内存参数、优化共享池、增加SGA大小
网络等待SQLNet message from client, SQLNet message to client网络延迟、客户端处理慢优化网络、调整SQL*Net参数、优化客户端处理
其他等待log file sync, log file parallel write, checkpoint not complete日志文件配置不当、检查点配置不合理优化日志文件配置、调整检查点参数

2.5 顶级SQL语句

AWR报告中包含消耗资源最多的SQL语句,按以下指标排序:

  • Elapsed Time(总执行时间)
  • CPU Time(CPU时间)
  • Buffer Gets(逻辑读)
  • Disk Reads(物理读)
  • Executions(执行次数)
  • Parse Calls(解析次数)
  • Rows Processed(处理行数)

关键信息

  • SQL ID:SQL语句的唯一标识符
  • Plan Hash Value:执行计划的哈希值
  • Elapsed Time per Execution:每次执行的平均时间
  • CPU Time per Execution:每次执行的平均CPU时间
  • Buffer Gets per Execution:每次执行的平均逻辑读
  • SQL文本:SQL语句的完整或部分文本

2.6 段统计信息

显示消耗资源最多的段(表或索引):

统计类型常见段优化建议
Physical Reads频繁访问的大表优化SQL、添加索引、分区表
Physical Writes频繁更新的表优化更新逻辑、调整存储参数
Buffer Busy Waits热点段调整表设计、使用分区、增加 freelists
Row Lock Waits频繁更新的表优化应用逻辑、减少锁持有时间

2.7 实例活动统计

显示数据库的各种活动统计,如:

  • CPU使用情况
  • 内存使用情况
  • I/O活动情况
  • 网络活动情况
  • 事务处理情况

3. AWR 报告分析流程

  1. 查看报告头信息:了解数据库基本情况和报告时间范围
  2. 分析负载概要:评估数据库负载情况,确定是否过载
  3. 检查实例效率百分比:识别低效的性能指标
  4. 分析等待事件:确定主要性能瓶颈
  5. 查看顶级SQL:识别消耗资源最多的SQL语句
  6. 分析段统计:识别热点段和问题段
  7. 检查实例活动统计:了解数据库各项活动的详细情况
  8. 查看初始化参数:检查参数配置是否合理
  9. 生成优化建议:根据分析结果,提出针对性的优化建议

ASH 报告解读

1. ASH 报告生成

sql
-- 登录SQL*Plus,连接到目标数据库
sqlplus / as sysdba

-- 生成ASH报告
@?/rdbms/admin/ashrpt.sql

-- 选择报告格式(html或text)
Enter value for report_type: html

-- 选择报告时间范围
Enter value for duration: 10

-- 选择起始时间
Enter value for begin_time:

-- 输入报告文件名
Enter value for report_name:
oracle_ash_report.html

2. ASH 报告关键部分解读

2.1 报告头信息

ASH报告的开头部分包含基本信息:

  • 数据库名称、版本
  • 实例名称、主机名
  • 报告时间范围
  • 采样时间间隔
  • 采样数量
  • DB Time和Sample Time

2.2 ASH 等待事件分析

ASH报告的核心是等待事件分析,包含:

  • Top Event P1/P2/P3 Values:显示每个等待事件的P1、P2、P3参数值
  • Top SQL with Top Events:显示与等待事件相关的SQL语句
  • Top Sessions:显示消耗资源最多的会话
  • Top Blocks:显示热点数据块
  • Top Objects/Files/Latches:显示热点对象、文件和闩锁

2.3 ASH 报告的优势

相比AWR报告,ASH报告具有以下优势:

  • 更高的时间精度(默认1秒采样一次)
  • 更详细的会话级信息
  • 更适合分析短期性能问题
  • 可以显示具体的等待事件参数
  • 可以关联等待事件与SQL语句

3. ASH 报告分析流程

  1. 查看报告头信息:了解报告时间范围和采样情况
  2. 分析Top等待事件:确定主要性能瓶颈
  3. 查看等待事件的P1/P2/P3值:获取更详细的等待信息
  4. 分析相关SQL语句:识别导致等待的SQL
  5. 查看Top Sessions:识别消耗资源最多的会话
  6. 分析热点块和对象:识别问题数据块和对象
  7. 生成优化建议:根据分析结果,提出针对性的优化建议

19c与21c AWR/ASH报告差异

特性19c21c
报告格式基本HTML格式增强的HTML格式,更友好的界面
指标丰富度丰富更丰富,新增多个性能指标
SQL分析基本的SQL分析增强的SQL分析,包含更多执行计划信息
等待事件分类基本分类更细粒度的等待事件分类
内存报告基本内存统计增强的内存报告,包含更详细的内存使用情况
自动诊断基本的诊断信息增强的自动诊断,提供更多优化建议
报告生成速度一般优化,报告生成速度更快
ASH采样精度1秒支持更高精度的采样(最高0.1秒)

差异处理策略

  1. 适应新的报告格式:熟悉21c增强的AWR/ASH报告格式,充分利用新的界面和功能
  2. 关注新增指标:关注21c新增的性能指标,获取更全面的性能信息
  3. 利用增强的SQL分析:使用21c增强的SQL分析功能,更深入地分析SQL性能
  4. 调整采样精度:根据需要,调整ASH采样精度,获取更细粒度的性能数据
  5. 参考自动诊断建议:充分利用21c增强的自动诊断功能,获取针对性的优化建议

AWR/ASH 报告最佳实践

1. 报告生成最佳实践

  • 合理设置快照间隔:根据数据库负载情况,设置合理的AWR快照间隔(默认1小时)
  • 调整ASH采样精度:根据性能问题的特点,调整ASH采样精度
  • 定期生成报告:定期生成AWR报告,建立性能基线
  • 及时生成报告:在性能问题发生后,及时生成ASH报告,捕捉问题细节
  • 保存历史报告:保存历史AWR/ASH报告,便于性能趋势分析

2. 报告分析最佳实践

  • 建立性能基线:建立正常负载下的性能基线,便于识别异常情况
  • 对比分析:对比不同时间段的AWR报告,识别性能变化趋势
  • 关联分析:结合AWR和ASH报告,进行关联分析,获取更全面的信息
  • 关注关键指标:重点关注DB Time、等待事件、顶级SQL和热点段
  • 深入分析等待事件:分析等待事件的详细参数,确定根本原因
  • 结合执行计划:结合SQL的执行计划,深入分析SQL性能问题

3. 性能优化最佳实践

  • 优先优化高消耗SQL:优先优化AWR报告中消耗资源最多的SQL语句
  • 解决主要等待事件:针对主要等待事件,采取相应的优化措施
  • 调整参数配置:根据AWR报告中的指标,调整数据库参数
  • 优化存储配置:针对I/O等待事件,优化存储配置
  • 优化应用逻辑:针对并发等待事件,优化应用逻辑,减少锁竞争
  • 定期监控:定期生成和分析AWR/ASH报告,监控优化效果

常见问题(FAQ)

1. 如何确定AWR报告的最佳快照间隔?

问题:如何确定适合自己数据库的AWR快照间隔?

解决方案

  • 对于负载稳定的数据库,默认的1小时快照间隔通常足够
  • 对于负载波动较大的数据库,可以将快照间隔调整为30分钟或更短
  • 对于短期性能问题分析,可以手动生成快照
  • 考虑磁盘空间和性能影响,不要设置过短的快照间隔

2. 如何分析AWR报告中的DB Time?

问题:AWR报告中的DB Time很高,如何分析?

解决方案

  • 计算DB Time/Elapsed Time比值,如果大于1,表示数据库过载
  • 分析等待事件,确定主要等待类型
  • 查看顶级SQL语句,识别消耗时间最多的SQL
  • 检查实例效率百分比,识别低效的性能指标
  • 结合ASH报告,分析具体的等待情况

3. 如何识别和优化AWR报告中的顶级SQL?

问题:AWR报告中显示某些SQL消耗了大量资源,如何优化?

解决方案

  • 查看SQL文本和执行计划
  • 分析执行计划,识别性能瓶颈(如全表扫描、缺失索引等)
  • 优化SQL语句,如添加索引、调整连接方式、重写SQL等
  • 查看SQL的执行次数,如果执行频繁,考虑缓存结果或优化执行计划
  • 使用SQL Tuning Advisor工具,获取自动优化建议

4. 如何分析ASH报告中的等待事件?

问题:ASH报告中显示大量的等待事件,如何分析?

解决方案

  • 查看Top等待事件,确定主要等待类型
  • 分析等待事件的P1、P2、P3参数,获取更详细的信息
  • 查看与等待事件相关的SQL语句和会话
  • 分析热点块和对象,确定问题根源
  • 结合AWR报告,进行综合分析

5. 如何利用AWR/ASH报告进行性能趋势分析?

问题:如何利用AWR/ASH报告分析数据库性能趋势?

解决方案

  • 定期生成AWR报告,保存历史报告
  • 对比不同时间段的AWR报告,分析关键指标的变化趋势
  • 关注DB Time、等待事件、顶级SQL等指标的变化
  • 识别性能逐渐恶化的趋势,提前采取优化措施
  • 使用Oracle Enterprise Manager的性能趋势分析功能,更直观地查看性能变化

6. 如何处理AWR报告中的大量等待事件?

问题:AWR报告中显示大量不同类型的等待事件,如何处理?

解决方案

  • 按等待时间排序,优先处理排名靠前的等待事件
  • 对等待事件进行分类,识别主要问题类别(I/O、并发、内存等)
  • 针对不同类别的等待事件,采取相应的优化措施
  • 不要同时处理所有等待事件,优先解决最严重的问题
  • 定期重新生成AWR报告,检查优化效果

总结

AWR和ASH报告是Oracle数据库性能分析的重要工具,通过解读这些报告,可以深入了解数据库的性能状况,识别性能瓶颈,进行针对性的优化。

在实际分析过程中,应该:

  • 结合AWR和ASH报告,获取更全面的性能信息
  • 关注关键指标,如DB Time、等待事件、顶级SQL等
  • 建立性能基线,便于识别异常情况
  • 定期生成和分析报告,监控性能变化趋势
  • 针对不同的性能问题,采取相应的优化措施
  • 充分利用19c和21c提供的增强功能,提高分析效率和准确性

通过掌握AWR/ASH报告的解读方法和最佳实践,可以有效提升Oracle数据库的性能,确保数据库的稳定运行和良好响应。