Oracle ASH 报告详解:与 AWR 的区别、使用场景及生成方法

在 Oracle 数据库日常运维和故障排查中,AWR 和 ASH 是常用的性能分析工具。

很多时候我们会遇到这样的情况:

  • 某个时间段系统突然变慢

  • 用户反馈某个页面卡顿

  • 数据库出现锁等待

  • 某条 SQL 在特定时间段耗时异常

  • 想知道数据库这一小时整体负载怎么样

这时候就需要根据问题类型,选择使用 AWRASH


一、什么是 ASH?

ASH 全称:

复制代码
Active Session History

中文一般称为:

复制代码
活动会话历史

它会对数据库中的活跃会话进行采样,并记录当时会话正在做什么,比如:

复制代码
执行哪条 SQL
等待什么事件
在哪个对象上工作
是否发生锁等待
哪个会话正在阻塞
当前处于 CPU 还是等待状态

因此,ASH 更适合分析:

某一个具体时间段内,数据库到底发生了什么。

例如:

复制代码
15:30 ~ 16:30

用户反馈这个时间段 OA 很卡,那么 ASH 就非常适合。


二、什么是 AWR?

AWR 全称:

复制代码
Automatic Workload Repository

AWR 会定期保存数据库的性能快照。

AWR 报告更偏向于分析数据库一段时间内的整体运行情况,例如:

复制代码
DB Time
DB CPU
等待事件
SQL执行情况
逻辑读
物理读
Redo
解析次数
RAC等待
I/O性能

简单理解:

AWR 看整体,ASH 看细节。


三、ASH 和 AWR 的区别

可以简单记成下面这样:

对比项 AWR ASH
分析范围 整体性能 活跃会话
时间粒度 较粗 较细
适合场景 数据库整体变慢 某个具体时间段卡顿
SQL分析 可以 更直观
锁等待分析 可以发现 更适合定位
会话分析 较弱 很强
时间点分析 不够精确 非常适合
Top SQL 支持 支持
Blocking Session 一般 更直观

四、什么时候用 AWR?

如果你的问题是:

复制代码
数据库为什么整体变慢?
CPU是不是很高?
磁盘I/O是不是有问题?
哪类等待事件最多?
这一小时有哪些高消耗SQL?
RAC有没有性能问题?

优先看:

复制代码
AWR

比如:

复制代码
15:00 ~ 16:00

数据库整体性能异常,可以先生成一份 AWR。


五、什么时候用 ASH?

如果你的问题是:

复制代码
15:35为什么突然卡了?
16:20用户操作为什么很慢?
某个时间段有没有锁?
哪条SQL在当时占CPU?
哪个Session在阻塞?

更适合:

复制代码
ASH

尤其是用户能明确提供故障时间时,ASH 非常有价值。


六、实际排障建议

在生产环境排查时,可以按下面的思路:

复制代码
数据库整体性能问题
        ↓
       AWR
        ↓
发现某个时间段异常
        ↓
       ASH
        ↓
继续定位SQL / Session / Lock

也就是说:

AWR 用来定方向,ASH 用来定位具体问题。


七、Oracle ASH 报告生成方法

下面以 Oracle 19c PDB 环境为例。

1. 登录数据库

切换 Oracle 用户:

复制代码
su - oracle

设置实例:

复制代码
export ORACLE_SID=XXX

确认:

复制代码
echo $ORACLE_SID

登录:

复制代码
sqlplus / as sysdba

这也是你当前手册中的标准登录方式。


2. 切换目标 PDB

查看 PDB:

复制代码
show pdbs;

切换到目标 PDB,例如:

复制代码
alter session set container=erp;

确认:

复制代码
show con_name;

3. 生成 ASH 报告

执行:

复制代码
@?/rdbms/admin/ashrpt.sql

按照提示填写参数。

Report Type

直接回车:

复制代码
Report Type:
回车

默认:

复制代码
HTML

AWR Location

PDB 环境建议:

复制代码
AWR_PDB

Instance

只分析当前 RAC 实例:

复制代码
1

如果分析所有 RAC 实例:

复制代码
ALL

Begin Time

例如:

复制代码
08/12/26 15:30

时间格式:

复制代码
MM/DD/YY HH24:MI

Duration

分析 60 分钟:

复制代码
60

你原手册中的参数也是这一组。

最终分析时间就是:

复制代码
2026-08-12 15:30
~
2026-08-12 16:30

八、查看生成的 ASH 报告

生成成功后会看到类似:

复制代码
Report written to ashrpt_1_0812_1630.html

退出 SQL*Plus:

复制代码
exit

进入目录:

复制代码
cd /home/oracle

查看报告:

复制代码
ls -lh ashrpt_*.html

查看完整路径:

复制代码
readlink -f ashrpt_1_0812_1630.html

九、ASH 报告重点看什么?

打开 HTML 后,重点看下面几个部分:

复制代码
Top Events
Top SQL
Top Sessions
Top Blocking Sessions
Activity Over Time

Top Events

主要看数据库当时在等什么:

复制代码
CPU + Wait for CPU
db file sequential read
enq: TX - row lock contention
library cache lock
cursor: pin S wait on X

Top SQL

重点找:

复制代码
高CPU SQL
全表扫描 SQL
执行频率高的 SQL
逻辑读高的 SQL

Top Sessions

可以判断:

复制代码
哪个Session最活跃
哪个用户占用资源最多
哪个程序在持续执行

Top Blocking Sessions

如果系统出现卡死、提交慢、业务页面长时间等待,可以重点看这一部分。


Activity Over Time

这个部分非常实用。

可以直接看:

复制代码
15:30
15:36
15:42
15:48
...

每个时间段主要发生了什么。

对于定位:

"某一分钟为什么卡"

非常有帮助。


十、总结

实际生产排障时,可以这样记:

复制代码
整体性能问题 → AWR
具体时间问题 → ASH

如果数据库整体运行缓慢,先看 AWR。

如果已经明确:

复制代码
某个时间段
某次用户操作
某次锁等待
某个SQL异常

建议直接查看 ASH。

很多 Oracle 性能问题,比较有效的排查方式就是:

复制代码
AWR 找方向
ASH 找现场
SQL执行计划找根因

这三者配合起来,基本可以覆盖大部分 Oracle 性能问题排查场景。

相关推荐
黑泽明*1 小时前
LVS-Keepalived-全解析
服务器·开发语言·笔记·学习·php
琥珀色糖1 小时前
Linux makefile
linux·运维·服务器·makefile·make
LCG元2 小时前
ESP32-IDF 远程固件升级实战:HTTPS OTA + 双分区切换 + 自动回滚
数据库·redis·https
2401_894915532 小时前
Geo 优化源码部署避坑指南:解决访问异常、定位失效、收录卡顿问题
java·服务器·后端·缓存·开源
whyutianict_vv2 小时前
HCIE-Storage存储3.0排错题实战:归因框架与排查命令
linux·服务器·网络
Elastic 中国社区官方博客2 小时前
用两行 JSON 替换你的 ILM 策略:数据流生命周期新增冻结层支持
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
️学习的小王2 小时前
MySQL常用函数知识点总结
数据库·mysql·oracle
看浪的路人2 小时前
第6讲:SQL 解析器
java·开发语言·数据库
小趴菜一只2 小时前
linux权限维持
linux·运维·服务器