3

Я работаю над Spring-Batch, где я использую встроенный DataSource (Apache Commons DBCP 1.3), JDBC3 db2jcc.jar для базы данных BD2 и JDK1.5. Я знаю, что DBCP2.x уже выпущен, но из-за существующей системы (JDK 1.5) я не могу обновить прямо сейчас.DBCP 1.3 Учет эффективности оценки валидации

DB Конфигурация:

<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 на дифракционную картину, процесс принятия 3 раза больше времени, чтобы завершить ,

При анализе этого я обнаружил, что существует свойство «validationInterval» в пуле соединений JCBC tomcat.

Мой вопрос:

1) Есть ли способ, я могу установить validationInterval в DBCP1.3 так, что он не будет проверять соединение все время, но по истечении определенного периода времени

2) Если я не использую validationQuery, есть ли какие-либо проблемы, с которыми я могу столкнуться?

3) Если никакой валидацииQuery не указано, как DBCP1.3 будет проверять соединение?

[EDIT]:

Вот результат теста после следующих предложений Нитин:

Run 1 с предыдущими конфигурациями: общее время - 74 СЕК

Run 2 Configurations: 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 сек

Однако тонкая настройка "timeBetweenEvictionRunsMillis" не так много изменений во время обработки, но я решил установить это 30 минут

ответ

1

1) Нет. Try

testOnBorrow = истинный

testOnReturn = ложный

testWhileIdle = ложь

2)

вы можете получить несвежий (сломанный) соединение для побега проверки. однако вы можете «настроить» timeBetweenEvictionRunsMillis ...что поток выполняет каждые 5 секунд, чтобы выселить неактивное соединение

3)

соединение не может быть подтверждено без validationQuery в ДБХПЕ 1.3

+0

Благодаря Нитин, первый вариант помогает мне улучшить производительность на 30%. Я отредактировал свой вопрос и добавил результат теста. Можете ли вы проверить мои конфигурации источников данных и сообщить мне, требуются ли какие-либо изменения. –

+0

Вы можете попробовать: Удалить: maxIdle = 10 Добавить: minIdle = 1 Также для «занятой» системы 30 минут для timeBetweenEvictionRunsMillis длинный, около минуты (60000) кажется ОК – Nitin

+0

Спасибо Nitin, я внесла изменения, основываясь на ваших предложениях и ооочень хорошо. Цените свою помощь. –