使用 Jooq 的 Oracle 端到端指标

Oracle End To End metrics with Jooq

我正在开发一个批处理应用程序,其中 DAO 层使用 jooq 与 oracle 数据库进行交互。我已将 setClientInfo 配置为具有所有必需的 OCSID 密钥的 oracle 连接。我正在使用扩展 DelegatingDataSource 的包装器 class 在批处理应用程序的不同阶段动态更改模块、操作、ecid 和 client_id,例如我将 action 设置为当前步骤名称和 module 作为当前作业名称等。我还设置了 action 和过程名称。

我想从这些指标中追踪到 job/step/procedure 存在性能问题。我观察到在批处理应用程序 运行 期间,一些指标保存在 v$session table 中。批量申请完成后,我只能看到 V$ACTIVE_SESSION_HISTORY 中的一些条目。我也尝试过使用 APEX_UTIL.PAUSE(120) 让程序休眠超过 2 分钟,但是在批处理应用 运行 之后我无法在 V$ACTIVE_SESSION_HISTORY table 中找到所有条目.即使在批处理应用程序 运行 期间有超过 10 到 15 个数据库调用,我也只能在 V$ACTIVE_SESSION_HISTORY 中看到 3 到 4 个条目。这些指标如何保存在 V$ACTIVE_SESSION_HISTORY 中?我怎样才能跟踪批处理应用程序中使用的 job/step/procedure 的性能?

如果您将 DataSource 与 jOOQ 的 DataSourceConnectionProvider 一起使用,jOOQ 将始终在每个语句的末尾调用 Connection.close(),这可能会根据您的配置将连接回到池中,也许会释放一些资源。如果你想确保你的“会话”持续更长时间,请确保连接池不会释放这些资源,或者甚至将 JDBC Connection 传递给 jOOQ 而不是 DataSource,在jOOQ 不会调用的情况 Connection.close()。你会的。

也许,如果较低精度的采样适合您,您可能对查询 DBA_HIST_ACTIVE_SESS_HISTORY 更感兴趣,请参阅:https://oracle-base.com/articles/10g/active-session-history

我已经通过删除 APEX_UTIL.PAUSE 解决了这个问题。通过这个 https://jonathanlewis.wordpress.com/2015/03/27/ash/ 我明白如果会话进入睡眠状态,它将在 v$session 中显示为 status = 'ACTIVE' 和 state = 'WAITING' 但它不会记录在 v$active_session_history .