DBCP 1.3 验证查询性能下降

DBCP 1.3 Validation Query Degrading Performance

我正在处理 Spring-Batch,我使用嵌入式数据源(Apache Commons DBCP 1.3),JDBC3 db2jcc.jar 用于 BD2 数据库,JDK1.5。我知道 DBCP2.x 已经发布,但由于现有系统 (JDK 1.5) 我现在无法升级。

数据库配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/>
    <property name="url" value="****"/>
    <property name="username" value="***"/>
    <property name="password" value="****"/>
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="10"/>
    <property name="maxIdle" value="10"/>
    <property name="maxWait" value="10000"/>
    <property name="minEvictableIdleTimeMillis" value="30000"/>
    <property name="timeBetweenEvictionRunsMillis" value="5000"/>
    <property name="validationQuery" value="select 1 from sysibm.sysdummy1"/>
    <property name="testOnBorrow" value="true"/>
    <property name="testOnReturn" value="true"/>
    <property name="testWhileIdle" value="true"/>
</bean>

我注意到如果我使用 validationQuery 属性 和 testOnBorrow, testOnReturntestWhileIdle 到 ture,该过程需要 3 倍的时间才能完成。

在分析这个时我发现 属性 “validationInterval” 在 tomcat JDBC 连接池中。

我的问题:

1) 有什么方法可以在 DBCP1.3 中设置一个 validationInterval,这样它就不会一直验证连接,而是在指定的时间段后验证

2) 如果我不使用 validationQuery,我可能会遇到什么问题吗?

3) 如果没有提供validationQuery,DBCP1.3将如何验证连接?

[编辑]:

以下是遵循 Nitin 建议后的测试结果:

运行 1 与以前的配置: 总耗时 - 74 秒

运行 2个配置: set testOnBorrow=true, testOnReturn=false, testWhileIdle=false

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/>
    <property name="url" value="****"/>
    <property name="username" value="***"/>
    <property name="password" value="****"/>
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="10"/>
    <property name="maxIdle" value="10"/>
    <property name="maxWait" value="10000"/>
    <property name="minEvictableIdleTimeMillis" value="1800000"/>
    <property name="timeBetweenEvictionRunsMillis" value="1800000"/>
    <property name="validationQuery" value="select 1 from sysibm.sysdummy1"/>
    <property name="testOnBorrow" value="true"/>
    <property name="testOnReturn" value="false"/>
    <property name="testWhileIdle" value="false"/>
</bean>

总耗时47 秒

但是调整“timeBetweenEviction运行sMillis”处理时间没有太大变化,但我决定将其设置为 30 分钟

1)号试试

testOnBorrow=true

testOnReturn=假

testWhileIdle=假

2)

您可能会因为逃避验证而获得陈旧(损坏)的连接。但是,您可以 'tweak' timeBetweenEvictionRunsMillis ...该线程每 5 秒执行一次以驱逐空闲连接

3)

DBCP 1.3 中没有 validationQuery 无法验证连接