外观
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.html1.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.html2. 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 | 登录次数 | 无明显差异 |
| Executions | SQL执行次数 | 无明显差异 |
| Parses | SQL解析次数 | 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 pin | SGA不足、共享池争用、内存配置不当 | 调整内存参数、优化共享池、增加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 报告分析流程
- 查看报告头信息:了解数据库基本情况和报告时间范围
- 分析负载概要:评估数据库负载情况,确定是否过载
- 检查实例效率百分比:识别低效的性能指标
- 分析等待事件:确定主要性能瓶颈
- 查看顶级SQL:识别消耗资源最多的SQL语句
- 分析段统计:识别热点段和问题段
- 检查实例活动统计:了解数据库各项活动的详细情况
- 查看初始化参数:检查参数配置是否合理
- 生成优化建议:根据分析结果,提出针对性的优化建议
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.html2. 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 报告分析流程
- 查看报告头信息:了解报告时间范围和采样情况
- 分析Top等待事件:确定主要性能瓶颈
- 查看等待事件的P1/P2/P3值:获取更详细的等待信息
- 分析相关SQL语句:识别导致等待的SQL
- 查看Top Sessions:识别消耗资源最多的会话
- 分析热点块和对象:识别问题数据块和对象
- 生成优化建议:根据分析结果,提出针对性的优化建议
19c与21c AWR/ASH报告差异
| 特性 | 19c | 21c |
|---|---|---|
| 报告格式 | 基本HTML格式 | 增强的HTML格式,更友好的界面 |
| 指标丰富度 | 丰富 | 更丰富,新增多个性能指标 |
| SQL分析 | 基本的SQL分析 | 增强的SQL分析,包含更多执行计划信息 |
| 等待事件分类 | 基本分类 | 更细粒度的等待事件分类 |
| 内存报告 | 基本内存统计 | 增强的内存报告,包含更详细的内存使用情况 |
| 自动诊断 | 基本的诊断信息 | 增强的自动诊断,提供更多优化建议 |
| 报告生成速度 | 一般 | 优化,报告生成速度更快 |
| ASH采样精度 | 1秒 | 支持更高精度的采样(最高0.1秒) |
差异处理策略
- 适应新的报告格式:熟悉21c增强的AWR/ASH报告格式,充分利用新的界面和功能
- 关注新增指标:关注21c新增的性能指标,获取更全面的性能信息
- 利用增强的SQL分析:使用21c增强的SQL分析功能,更深入地分析SQL性能
- 调整采样精度:根据需要,调整ASH采样精度,获取更细粒度的性能数据
- 参考自动诊断建议:充分利用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数据库的性能,确保数据库的稳定运行和良好响应。
