问题描述
我正在处理一个批处理应用程序,其中DAO层使用jooq与oracle数据库进行交互。我已使用所有必需的OCSID密钥将setClientInfo
配置到oracle连接。我正在使用扩展了DelegatingDataSource
的包装器类,以在批处理应用程序的不同阶段动态更改模块,操作,ecid和client_id,例如示例,我将action
设置为当前步骤名称,将{{1 }}作为当前职位名称,依此类推。我还为module
设置了过程名称。
我想从这些指标中跟踪哪个作业/步骤/过程存在性能问题。我观察到,在批处理应用程序运行期间,某些度量标准保存在action
表中。批处理申请完成后,我只能在v$session
中看到一些条目。我还尝试通过使用V$ACTIVE_SESSION_HISTORY
使过程休眠2分钟以上,但是运行批处理应用程序后,无法在APEX_UTIL.PAUSE(120)
表中找到所有条目。即使在运行批处理应用程序期间有超过10到15个DB调用,我在V$ACTIVE_SESSION_HISTORY
中也只能看到3到4个条目。这些指标如何保存在V$ACTIVE_SESSION_HISTORY
中?如何针对批处理应用程序中使用的作业/步骤/过程实现绩效跟踪?
解决方法
如果您将DataSource
与jOOQ的DataSourceConnectionProvider
一起使用,jOOQ将始终在每个语句的末尾调用Connection.close()
,这可能取决于您的配置,将连接放回原处。在游泳池里,也许会释放一些资源。如果要确保“会话”持续更长的时间,请确保连接池不会释放这些资源,甚至在jOOQ情况下甚至将JDBC Connection
传递给jOOQ而不是DataSource
将不会呼叫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中。