最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何解决Oracle ASH数据采样不足的问题
时间:2026-08-16 10:02:49 编辑:袖梨 来源:一聚教程网
ASH数据“不足”需先确认statistics_level为TYPICAL,再排查_ash_size不足、采样时间范围不准或应转向dba_hist_active_sess_history查历史数据。
ASH数据“不足”不是丢了,而是被覆盖或根本没采到——得先分清是内存挤兑、采样失效,还是查询姿势错了。
查不到数据?先确认 statistics_level 是不是 TYPICAL
这是最常被忽略的硬开关。如果设成 ALL 或 BASIC,v$active_session_history 会彻底停摆,连一行都不会有。
-
SELECT name, value FROM v$parameter WHERE name = 'statistics_level';—— 必须返回TYPICAL - 改回来只需:
ALTER SYSTEM SET statistics_level = typical SCOPE = BOTH;,无需重启 - RAC 环境下每个节点都得单独检查,别只看一个实例
v$active_session_history 时间跨度太短?大概率是 _ash_size 不够
默认 4MB 内存缓冲区,在高并发下撑不过 10–15 分钟。查 MIN(sample_time) 和 MAX(sample_time) 发现只差几分钟,基本就是 buffer 溢出了。
- 扩容需改隐含参数:
ALTER SYSTEM SET "_ash_size" = 524288000 SCOPE = SPFILE;(500MB 示例) - 必须同步调大
sga_max_size,否则下次启动失败 - 改完要重启实例,不能
SCOPE=BOTH热生效 - 别盲目堆大——超 30MB Oracle 不接受,且过大会挤占其他 SGA 组件
想查“最近一分钟”却总漏数据?别用 SYSDATE - 1/1440
ASH 采样不是均匀滴答,平均约 1 秒一次,但实际间隔浮动很大。用模糊时间范围容易跨过整个采样窗口,直接查不到。
- 换成精确时间范围:
SAMPLE_TIME BETWEEN TIMESTAMP '2026-07-21 19:30:00' AND TIMESTAMP '2026-07-21 19:31:00' - 若不确定具体秒级时间,先用
dba_hist_active_sess_history定位大致区间(它每 10 秒存一次,更稳定) - 短于 500ms 的事件本来就会漏采,ASH 就不是为这种粒度设计的
历史问题查不到?转向 dba_hist_active_sess_history 和 AWR 快照
v$active_session_history 是内存视图,天然易失;而 dba_hist_active_sess_history 是磁盘持久化数据,只要 AWR 正常采集,就可能保留数天甚至数周。
- 先确认 AWR 快照是否在运行:
SELECT COUNT(*) FROM dba_hist_snapshot WHERE end_interval_time > SYSDATE - 1; - 查历史 ASH:
SELECT * FROM dba_hist_active_sess_history WHERE sample_time BETWEEN ... - 注意:它只保存约 10% 的原始采样,细节比内存版粗,但时间覆盖长得多
- 某些场景(如凌晨抖动),内存版早被覆盖,但
awr_pdb_active_sess_history里还留着线索
真正难搞的不是调参数,而是区分“没采到”和“采了但被覆盖”。前者得看 statistics_level 和 MMNL 进程是否活着,后者才是调 _ash_size 的事。很多人一上来就加内存,结果发现压根没开采样功能。
相关文章
- 在职场中,员工工作纪律管理制度的重要性与AI写作工具的优势 08-16
- 原神云游戏入口直达-原神云游戏官网入口2026 08-16
- 华为路由器灰色闪烁怎么回事(华为路由器灰色闪烁原因有哪些) 08-16
- 如何撰写总监任命书?一份详细的总监任命书模板与提示词供您参考! 08-16
- 如何制定办公室员工管理制度?一份详尽的范文与提示词供你参考! 08-16
- 头号禁区2026兑换码有哪些 08-16