3

DB2データベースとJDK1.5用の組み込みデータソース(Apache Commons DBCP 1.3)、JDBC3 db2jcc.jarを使用しているSpring-Batchで作業しています。私は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> 

私はトゥーレにtestOnBorrow、testOnReturntestWhileIdleとともにvalidationQueryプロパティを使用している場合は、プロセスが完了するまでに3倍の時間を取って気づきました。

これを解析しているうちに、tomcat JDBC接続プールに "validationInterval"というプロパティがあります。

私の質問:

1)それは、接続のすべての時間を検証しないように、私はDBCP1.3にvalidationIntervalを設定することができますどのような方法がありますが、指定された期間

2後)validationQueryを使用しないと、私が直面する可能性のある問題はありますか?

3)DBCP1.3がどのように接続を検証するかについてvalidationQueryが指定していない場合は、

[EDIT]:以前の設定で

ラン1:ここでは

には、次のニティンの提案後の試験結果で撮影した 合計時間 - 74秒]

実行コンフィギュレーション: 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> 

しかし号試してみてください "timeBetweenEvictionRunsMillis" ではない多くの処理時間の変化が、私は30分

答えて

1

これを1に設定することを決定した)を微調整47秒

を要した合計時間

testOnBorrow =真

testOnReturn = falseを

2偽testWhileIdle =)

あなたは検証を逃れるための古い(壊れた)接続を得ることができます。しかし、あなたはtimeBetweenEvictionRunsMillisを "微調整"するかもしれません...そのスレッドは、アイドル状態の接続

3)接続がDBCP 1.3

+0

おかげニティンにvalidationQueryせずに検証することはできません

は、最初のオプションは、パフォーマンスに30%を向上させるために私を助けに立ち退かせるために5秒ごとに実行されます。私は自分の質問を編集し、テスト結果を追加しました。私のデータソース設定をチェックして、必要な変更があれば教えてください。 –

+0

試してみることもできます:削除:maxIdle = 10追加:minIdle = 1また、「ビジー」システムの場合、timeBetweenEvictionRunsMillisの時間が長く、約60000分でOKです。 – Nitin

+0

Nitinありがとうございました。罰金をあげるあなたの助けを感謝します。 –

関連する問題