MODULE字段应通过v$session或V$ACTIVE_SESSION_HISTORY中module列查询,需结合应用层调用DBMS_APPLICATION_INFO.SET_MODULE显式设置才准确;优先用LIKE模糊匹配、注意大小写及空值情况,并严格加sample_time时间过滤以避免残留干扰。
MODULE字段怎么查才准?别只靠PROGRAM
program列容易被伪造或复用,比如所有java应用都可能显示 oracle@host,根本分不清是谁。真正稳定标识应用模块的是 module 和 action,它们由应用层调用 dbms_application_info.set_module 显式设置,数据库会原样记录进 ash。
实操建议:
- 先确认目标模块是否真有值:查
v$session里活跃会话的module和action,不是所有应用都设——没设就等于空过滤 -
MODULE通常填系统名/服务名(如'ORDER-SERVICE'、'REPORT-ENGINE'),长度上限 48 字节,超长会被截断 - 用
LIKE比=更安全,尤其当模块名含版本号或环境后缀时(如MODULE LIKE 'INVENTORY%PROD') - 注意大小写:Oracle 默认不区分,但若数据库启用了
SEC_CASE_SENSITIVE_LOGON=TRUE或应用用了双引号定义,就得严格匹配
ACTION字段该不该信?它和SQL执行阶段强相关
ACTION 不是静态标签,而是随业务动作动态更新的,比如“下单”“查库存”“生成报表”。但它只在 SQL 执行前/执行中有效,SQL 执行完或会话空闲时可能清空或残留旧值。
常见误判点:
- 大量样本显示
ACTION IS NULL或ACTION = 'NULL':说明应用没调用SET_ACTION,或只在连接池初始化时设了一次,后续未更新 - 同一个
MODULE下ACTION值杂乱(如混着'START'、'FETCH'、'COMMIT'):说明逻辑粒度太粗,得结合SQL_ID+EVENT看哪一步卡住 - 想抓“正在做某事”的实时瓶颈?必须加时间过滤:
sample_time > SYSDATE - 1/144(最近 10 分钟),否则历史残留值干扰极大
MODULE + ACTION 联合过滤的真实效果
单靠 MODULE 可能捞出一堆低频后台任务;单靠 ACTION 又容易漏掉没设值的主干流程。两者组合才能逼近真实业务路径。
典型查询写法:
SELECT sql_id, event, COUNT(*) cnt, ROUND(AVG(time_waited), 2) avg_wait_us FROM v$active_session_history WHERE module = 'PAYMENT-GW' AND action LIKE 'process_%' AND sample_time > SYSDATE - 1/288 -- 最近 5 分钟 GROUP BY sql_id, event ORDER BY cnt DESC;
关键提醒:
- 别在
DBA_HIST_ACTIVE_SESS_HISTORY上用高精度ACTION过滤——AWR 快照每小时才存一次,ACTION值大概率已丢失或覆盖 - 如果发现
MODULE值全是NULL或'ORACLE.EXE',优先检查应用代码是否漏了DBMS_APPLICATION_INFO调用,而不是硬凑模糊条件 - GoldenGate Extract 进程是个特例:它的
MODULE固定为'LogMiner%'或'oracle@ (J000)',这时ACTION几乎无意义,得转看EVENT和日志读取行为
为什么 MODULE 过滤有时“看起来没效果”?
最常被忽略的一点:ASH 的采样机制本身就有盲区。它只捕获“活动会话”(ON CPU 或非空闲等待),而很多模块的瓶颈恰恰出现在“看似空闲但实际卡在应用层”的环节——比如 JDBC fetch size 设得太小,导致大量短 SQL+网络往返,ASH 里只看到一堆 SQL*Net message from client,MODULE 对得上,但根本看不出是哪条 SQL 在拖慢整体吞吐。
这时必须交叉验证:
- 用
SQL_ID关联v$sql查executions和elapsed_time,看是不是高频低耗 SQL 积累成大延迟 - 查
v$session_longops,有些模块操作(如大数据导出)会在这里登记进度,ASH 不会体现 - 如果模块走的是连接池(如 HikariCP),还要确认池配置:过小的
maximumPoolSize会导致会话排队,ASH 里表现为大量enq: KO - fast object checkpoint或SQL*Net message to client等待,但MODULE本身没问题



















