3

Ich arbeite an einem Spring-Batch, wo ich eine eingebettete DataSource (Apache Commons DBCP 1.3), JDBC3 db2jcc.jar für BD2-Datenbank und JDK1.5. Ich weiß, DBCP2.x ist bereits freigegeben, aber wegen des vorhandenen Systems (JDK 1.5) kann ich jetzt nicht aktualisieren.DBCP 1.3 Validierungsabfrage Verschlechterung Leistung

DB-Konfigurationen:

<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> 

Ich bemerkte Wenn ich validation Eigenschaft zusammen mit testOnBorrow, testOnReturn und testWhileIdle ture, der Prozess 3-mal höher Zeit nehmen, um abzuschließen .

Während ich dies analysierte, fand ich eine Eigenschaft "validationInterval" in tomcat JDBC Verbindungspool.

Meine Frage:

1) Gibt es eine Möglichkeit, einen validationInterval in DBCP1.3 so einstellen kann, dass er die Verbindung die ganze Zeit nicht bestätigen würde, aber nach einer bestimmten Zeitperiode

2) Wenn ich validationQuery nicht verwende, gibt es irgendein Problem, dem ich gegenüberstehe?

3) Wenn keine validationQuery angegeben ist, wie DBCP1.3 die Verbindung validiert?

[EDIT]:

Hier ist das Testergebnis nach folgenden Nitin Vorschläge:

Lauf 1 mit früheren Konfigurationen: Gesamt genommen Time - 74 Sek

Führen Sie 2 Konfigurationen aus: 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> 

Insgesamt benötigte Zeit, 47 Sekunden

Tweaking jedoch "timeBetweenEvictionRunsMillis" nicht viel Veränderungen in der Verarbeitungszeit, aber ich habe beschlossen, diese

Antwort

1

1) bis 30 Minuten einstellen Nr Versuchen

testOnBorrow = true

testOnReturn = false

testWhileIdle = false

2)

Sie können veralten (gebrochen) Anschluss für die Validierung zu entkommen. Sie können jedoch timeBetweenEvictionRunsMillis ...dass Thread ausgeführt wird alle 5 Sekunden Leerlaufverbindung

3)

Verbindung nicht ohne validation in DBCP 1.3

+0

Dank Nitin, die erste Option hilft mir validiert werden gewaltsam zu vertreiben, um die Leistung 30% zu verbessern. Ich habe meine Frage bearbeitet und Testergebnis hinzugefügt. Können Sie bitte meine Datenquellenkonfigurationen überprüfen und lassen Sie mich wissen, wenn Änderungen erforderlich sind. –

+0

Sie können versuchen: Entfernen: maxIdle = 10 Hinzufügen: minIdle = 1 Auch für 'beschäftigt' System, 30 Minuten für timeBetweenEvictionRunsMillis ist lang, über Minute (60000) scheint in Ordnung – Nitin

+0

Dank Nitin, machte ich die Änderungen basierend auf Ihren Vorschlägen und seine gut woking. Schätze deine Hilfe. –