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 性能问题排查场景。

相关推荐
未济2 天前
linux 配置环境变量
linux
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
这个DBA有点耶2 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G2 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备2 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远2 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
_艾伦 耶格尔.2 天前
进程间通信
linux
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-052 天前
Linux IO编程——静态库、动态库
linux