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, testOnReturn 和 testWhileIdle 到 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 无法验证连接
我正在处理 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, testOnReturn 和 testWhileIdle 到 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 无法验证连接