Po problemach z wyciekiem połączenia i zakleszczeniami w DBCP podjęliśmy decyzję o zastąpieniu go pulą JDBC Tomcata. Oczywiście migracja była naprawdę prosta.Zwiększanie obciążenia i zmniejszanie wydajności podczas zastępowania DBCP do puli JDBC Tomcat
Ale po wdrożeniu w środowisku produkcyjnym zauważyłem, że obciążenie serwera z uruchomieniem dwóch Tomcatów wzrośnie z 4-4,5 do 5,5. Nie zrobiliśmy nic więcej poza zmianą puli. Ponadto wydajność mierzona za pomocą JMeter zmniejsza się o około 5%.
Spędziłem trochę czasu, aby dostroić parametry basenu, ale bez widocznych efektów. I wklejony mój obecny config (z <GlobalNamingResources>
w server.xml
) poniżej:
<Resource name="jdbc/xxxxxx"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
initialSize="10"
maxActive="100"
minIdle="10"
maxIdle="50"
maxWait="10000"
testOnBorrow="true"
testOnReturn="false"
testOnConnect="false"
testWhileIdle="false"
validationQuery="SELECT 1 from dual"
validationInterval="30000"
suspectTimeout="60"
timeBetweenEvictionRunsMillis="30000"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
abandonWhenPercentageFull="50"
minEvictableIdleTimeMillis="60000"
jmxEnabled="true"
username="xxxxx"
password="xxxxx"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:oci:xxxxx"/>
FairQueue i PoolSweeperEnabled są prawdziwe
na wiosnę ApplicationContext-jdbc.xml mam tylko:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="resourceRef">
<value>true</value>
</property>
<property name="jndiName">
<value>java:comp/env/jdbc/PortalDB</value>
</property>
</bean>
Co mam robić źle? Pomyślałem, że JDBC_pool powinien być szybszy od DBCP po wyjęciu z pudełka.
Spróbuj testWhenIdle = "true", a także spróbuj zminimalizować liczbę maxActive od 100 do około 20. Być może zbyt wiele połączeń w puli spowalnia działanie. –
Czy używasz tego samego zapytania sprawdzającego, co poprzednio? – rootkit
@ rootkit007 - nie, z dbcp nie użyłem kwerendy sprawdzania poprawności. – Dzinek