MySQL blijft maar nieuwe connecties aanmaken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Standeman
  • Registratie: November 2000
  • Laatst online: 18:55

Standeman

Prutser 1e klasse

Topicstarter
Wij gebruiken MySQL i.c.m. c3p0 om connecties aan te maken in ons systeem. Nu werkt dat vrij goed, maar zodra het druk wordt, blijkt er een probleem te ontstaan.

Wanneer het aantal connecties in de pool oploopt zie ik dat het aantal connecties oploopt (duh). Maar wanneer de pool weer slinkt als het rustig wordt blijft hetzelfde aantal connecties in MySQL open staan.
Als hierna de pool weer groeit bij drukte worden de openstaande MySQL connecties niet gerecycled, maar worden er weer nieuwe connecties aangemaakt.

Of c3p0 sluit de connecties niet goed wanneer hij ze released of MySQL wil ze niet sluiten?

Uiteindelijk krijgt c3p0 geen connecties meer van MySQL omdat hij tegen de max_connections (=100) aanloopt.

Mijn c3p0 config ziet er alsvolgt uit:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<c3p0-config>
    <default-config>
        <property name="autoCommitOnClose">false</property>
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">50</property>
        <property name="minPoolSize">5</property>
        <property name="checkoutTimeout">1000</property>

        <!-- keep alive config -->
        <property name="automaticTestTable">c3p0_test_table</property>
        <property name="idleConnectionTestPeriod">1800</property>
        <property name="testConnectionOnCheckin">true</property>

        <!-- connection expiration -->
        <property name="maxConnectionAge">28200</property>
        <property name="maxIdleTime">28200</property>
        <property name="maxIdleTimeExcessConnections">1800</property>
    </default-config>
</c3p0-config>


In MySQL heb ik de volgende settings staan:
connect_timeout5
interactive_timeout28800
max_connect_errors10
max_connections100
max_user_connections0
wait_timeout28800


Nu ben ik niet echt een DB-admin, maar ik zie even niet waar het probleem nou zou moeten zitten?

The ships hung in the sky in much the same way that bricks don’t.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
interactive_timeout en wait_timeout mogen wel een factor honderd naar beneden voor de meeste apps. Max_connections kan iets omhoog, en max_user_connections moet je gewoon instellen op 75% van max_connections. Die laatste tip zorgt ervoor dat je als admin of andere applicatie nog wel bij de db kan.

{signature}


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 12-09 14:37

TheNephilim

Wtfuzzle

Ik zou inderdaad max_connections sowieso iets omhoog gooien, want je geeft met maar 100 connecties wel erg weinig ademruimte. De timeouts naar 60seconden lijkt me ook een goed idee.

Acties:
  • 0 Henk 'm!

  • Xoverride
  • Registratie: December 2000
  • Laatst online: 05-06 09:17

Xoverride

sabai sabai

Gebruik je iets van een ORM? Ik had het namelijk ook met C3PO in een bepaalde setup met Spring/Hibernate.

Overgestapt naar BasicDataSource en geen problemen meer:
code:
1
2
3
4
5
6
7
8
9
10
11
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        
        <property name="url" value="jdbc:mysql://localhost:3306/myDB?autoReconnect=true" />
        <property name="username" value="login" />
        <property name="password" value="password" /> 
        
        <property name="maxActive" value="100" />   
        <property name="initialSize" value="10" />              
    </bean>

Acties:
  • 0 Henk 'm!

  • Standeman
  • Registratie: November 2000
  • Laatst online: 18:55

Standeman

Prutser 1e klasse

Topicstarter
Aan de settings zelf ligt het niet direct, alhoewel het wel goede tips zijn :)

Het probleem is dat c3p0 zegt dat hij 20 connections in zijn pool heeft, terwijl MySQL er toch wel 80 heeft openstaan. Het lijkt net alsof c3p0 de connecties niet echt vrij geeft :/

The ships hung in the sky in much the same way that bricks don’t.


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 16:54
Voutloos schreef op donderdag 03 juni 2010 @ 15:11:
interactive_timeout en wait_timeout mogen wel een factor honderd naar beneden voor de meeste apps. Max_connections kan iets omhoog, en max_user_connections moet je gewoon instellen op 75% van max_connections. Die laatste tip zorgt ervoor dat je als admin of andere applicatie nog wel bij de db kan.
Dat laatste is niet nodig voor users met het SUPER privilege. MySQL reserveert altijd 1 extra connectie voor super users

Acties:
  • 0 Henk 'm!

  • Standeman
  • Registratie: November 2000
  • Laatst online: 18:55

Standeman

Prutser 1e klasse

Topicstarter
Voorlopig ben ik eerst mijn my.cnf file kwijt find / | grep my.cnf levert niets op :?
Xoverride schreef op donderdag 03 juni 2010 @ 16:16:
Gebruik je iets van een ORM? Ik had het namelijk ook met C3PO in een bepaalde setup met Spring/Hibernate.

Overgestapt naar BasicDataSource en geen problemen meer:
code:
1
2
3
4
5
6
7
8
9
10
11
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        
        <property name="url" value="jdbc:mysql://localhost:3306/myDB?autoReconnect=true" />
        <property name="username" value="login" />
        <property name="password" value="password" /> 
        
        <property name="maxActive" value="100" />   
        <property name="initialSize" value="10" />              
    </bean>
Nope, geen Hibernate ofzo. Gewoon plain old jdbc :)

[ Voor 5% gewijzigd door Standeman op 03-06-2010 16:33 ]

The ships hung in the sky in much the same way that bricks don’t.

Pagina: 1