查不到ASH数据的根本原因包括:statistics_level设为BASIC导致v$active_session_history为空;AWR快照未覆盖目标时段;RAC环境下未使用DBA_HIST_ACTIVE_SESS_HISTORY聚合全实例数据;时间过滤因类型不匹配或隐式转换失效。

查不到数据,先看 v$active_session_history 是否真在采样
ASH 查不到历史会话,最常见原因是压根没采集到——v$active_session_history 是内存视图,采样开关由 statistics_level 严格控制。设为 BASIC 时,该视图完全为空,连一行都不会写入。
实操建议:
- 立即执行
SELECT name, value FROM v$parameter WHERE name = 'statistics_level';—— 若返回BASIC,必须改为TYPICAL或ALL并重启实例 - 验证当前是否真有样本:
SELECT COUNT(*) FROM v$active_session_history WHERE sample_time > SYSDATE - 5/1440;—— 返回 0 就说明采样已停摆 - 别被
DBA_HIST_ACTIVE_SESS_HISTORY的存量数据误导:它可能还存着旧快照,但新数据进不来,是因为底层 ash 内存没东西可归档
DBA_HIST_ACTIVE_SESS_HISTORY 返回空,大概率是 AWR 快照没覆盖目标时段
这个表不是实时写入,而是依赖 MMON 进程在 AWR 快照生成时批量刷入。默认每小时一次快照,若目标时段(比如凌晨 2:17)没触发快照,那对应时间的 sample_time 就不会出现在磁盘表中。
实操建议:
- 先查快照是否存在:
SELECT MIN(snap_id), MAX(snap_id) FROM dba_hist_snapshot WHERE end_interval_time BETWEEN TIMESTAMP '2026-07-20 02:00:00' AND TIMESTAMP '2026-07-20 03:00:00'; - 若无结果,说明该小时没生成 AWR 快照——检查是否禁用快照、
statistics_level是否合规、或数据库刚启动不久 - 时间条件必须用显式
TIMESTAMP字面量,避免SYSDATE - 1/24类表达式:凌晨时段SYSDATE是当天上午,减 1 小时会跨天,逻辑错乱
RAC 环境下只查 v$ 或 gv$ 会漏掉其他节点的会话
单实例查 v$active_session_history 只能看到本节点内存样本;gv$active_session_history 虽能跨节点查实时内存,但它只保留约 1 小时,且高负载下易被覆盖。而历史分析必须用聚合全实例数据的 DBA_HIST_ACTIVE_SESS_HISTORY,否则阻塞链断在节点边界上就还原不出来。
实操建议:
- 查历史问题一律用
DBA_HIST_ACTIVE_SESS_HISTORY,不要拼UNION ALL多个gv$视图——归档逻辑和实时采样不等价 - 确认数据来源:
SELECT DISTINCT dbid, instance_number FROM DBA_HIST_ACTIVE_SESS_HISTORY WHERE sample_time BETWEEN ... - 若需聚焦某节点,加
AND instance_number = 2,但默认应保留全实例用于阻塞链分析
时间精度和类型不匹配导致过滤失效
sample_time 是 TIMESTAMP 类型,含微秒;而 SYSDATE 是 DATE,隐式转换会丢精度,甚至因 NLS 设置导致截断。写 sample_time > SYSDATE - 10/1440 看似查 10 分钟前,实际可能漏掉关键秒级样本。
实操建议:
- 查最近 10 分钟用:
sample_time >= SYSTIMESTAMP - INTERVAL '10' MINUTE - 查指定时刻段必须用:
sample_time BETWEEN TIMESTAMP '2026-07-20 02:17:00' AND TIMESTAMP '2026-07-20 02:22:00' - RAC 跨时区环境加
AT TIME ZONE 'UTC'对齐,例如:sample_time AT TIME ZONE 'UTC' BETWEEN ... - 别用
TO_DATE()或TRUNC()强转——它们会抹掉秒以下精度,让本就稀疏的采样更难命中
ASH 数据不是“查不到”,而是“根本不在那里”。内存样本被覆盖、AWR 快照未生成、参数配置错误、时间表达式失准——这些才是真实原因。最危险的是看到 DBA_HIST_ACTIVE_SESS_HISTORY 有几百条记录,就以为历史数据完整,其实它只是过去快照的残影,缺失时段可能一片空白。


















