Я работаю над 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 минут
Благодаря Нитин, первый вариант помогает мне улучшить производительность на 30%. Я отредактировал свой вопрос и добавил результат теста. Можете ли вы проверить мои конфигурации источников данных и сообщить мне, требуются ли какие-либо изменения. –
Вы можете попробовать: Удалить: maxIdle = 10 Добавить: minIdle = 1 Также для «занятой» системы 30 минут для timeBetweenEvictionRunsMillis длинный, около минуты (60000) кажется ОК – Nitin
Спасибо Nitin, я внесла изменения, основываясь на ваших предложениях и ооочень хорошо. Цените свою помощь. –