在几乎每次调用之前,我们都会收到一个非常无用的调用,它作为单独的事务进入 SELECT CURRENT SQL ID FROM SYSIBM.SYSDUMMY1

Preceeding almost every call, we get a pretty useless call that comes in as a separate transaction SELECT CURRENT SQLID FROM SYSIBM.SYSDUMMY1

我们有一个 JAVA 应用程序,它通过 openJPA 连接到 DB2 以获取数据。在几乎每个 SQL 调用之前,我们都会收到一个非常无用的调用,它作为单独的事务传入: “SELECT 当前 SQLID 来自 SYSIBM.SYSDUMMY1

DBA 说他不知道为什么几乎每次调用之前都会调用上述无用的 SQL 语句。

知道为什么调用此查询吗?我可以做些什么来跳过这个吗?

这个问题困扰我已经有一段时间了,DBA 抱怨 DB2 的事务数量急剧增加。

如有任何帮助,我们将不胜感激。谢谢

查询来自连接池管理器,在将其移交给应用程序之前对其进行验证。我认为您的连接池实现在最坏的情况下被破坏,充其量配置错误。

首先,

The query submitted by the driver to validate the connection shall be executed in the context of the current transaction.

http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#isValid(int)

因此,如果验证查询来自您的交易之外,则它是不合规的。

其次,从 JDBC4 开始,连接池实现不需要 运行 验证查询,它可以使用其他方法验证连接未关闭或失效。检查 HikariCP 配置以了解有关此主题的讨论。我不能向您保证您正在使用的池管理器能够进行不同的配置,但一定要检查它,并可能与其他池管理器一起检查它。

如果您在 WAS 中配置了数据源,请确保在 Data sources > YOUR_DATASOURCE > WebSphere Application Server data source properties 页面上您有 UNCHECKED 两个 Validate connections.. 选项。