/ / c3p0 le pool ne se réduit pas - ressort, pool de connexions, c3p0

le pool c3p0 ne se contracte pas - ressort, pool de connexions, c3p0

J'utilise le pool de connexions c3p0 avec Spring (avec jdbc simple, pas de veille prolongée). Voici ma configuration pour la piscine

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="acquireIncrement" value="3"/>
<property name="minPoolSize" value="3"/>
<property name="maxPoolSize" value="25"/>
<property name="maxStatementsPerConnection" value="0"/>
<property name="numHelperThreads" value="6"/>
<property name="testConnectionOnCheckout" value="false" />
<property name="testConnectionOnCheckin" value="false" />
<property name="idleConnectionTestPeriod" value="10"/>
<property name="preferredTestQuery" value="select curdate()"/>
<property name="maxIdleTime" value="5" />
<property name="unreturnedConnectionTimeout" value="5" />
<property name="debugUnreturnedConnectionStackTraces" value="true" />
</bean>

J'utilise JMX pour surveiller mon pool de connexions. Je vois que ma piscine atteint 25 sous charge mais ne diminue jamais. Est-ce que je manque un cofig ici?

Réponses:

2 pour la réponse № 1

La valeur par défaut est de ne pas réduire le pool. Vous devez définir maxIdleTimeExcessConnections. Extrait du manuel (non souligné dans l'original):

maxIdleTimeExcessConnections

Par défaut: 0

Nombre de secondes pendant lesquelles les connexions dépassant minPoolSize doivent être autorisé à rester inactif dans la piscine avant d'être cueilli. Destiné à applications qui souhaitent minimiser de manière agressive le nombre de Connexions, réduisant la piscine vers minPoolSize si, à la suite une pointe, le niveau de charge diminueet les connexions acquises ne sont pas plus besoin. Si maxIdleTime est défini, maxIdleTimeExcessConnections devrait être plus petit si le paramètre doit avoir un effet quelconque. Zéro signifie pas d'application, les connexions en excès ne sont pas inactives.

Pour que votre piscine se contracte après une période de forte charge:

  • Définissez des valeurs raisonnables pour minPoolSize et maxPoolSize. Les valeurs par défaut sont 3 et 15, ce qui devrait fonctionner correctement pour de nombreuses applications.
  • Définissez une valeur pour maxIdleTime. J'ai choisi 2700 secondes (45 minutes) car le pare-feu Cisco entre mon application et les serveurs de base de données expire les connexions TCP après une heure. C3P0 ignorera les connexions inactives depuis plus longtemps que cette période.
  • Définissez une valeur pour maxIdleTimeExcessConnections. J'ai pris 600 secondes (10 minutes). C3P0 fermera les connexions inactives pendant cette période jusqu'à ce que seules les connexions minPoolSize soient ouvertes.