niedziela, 15 lutego 2009

Hibernate i zbyt dużo połączeń

Zupełnie przez przypadek przy przesiadce z C3P0 na DBCP (swoją drogą dlaczego ComboPooledDataSource z C3P0 jest klasą final?) zauważyłem, że w ogromnym tempie przybywa połączeń z bazą. Ogromnym tzn. zazwyczaj 1 nowe połączenie na każdy request. Zachowanie to prowadzi błyskawicznie do wyczerpania puli (pool exhaust).
Rozwiązanie problemu jest banalne ale dość ciężkie do znalezienia. Kluczowe jest ustawienie właściwości hibernate.connection.release_mode na auto.

2 komentarze:

Chris pisze...

Witam, spotkalem sie z byt duza liczba polaczen podczas pracy na serwerze tomcat z aplikacja (hibernate + spring) ale dopiero ustawienie hibernate.connection.release_mode=after_statement pomoglo, dla auto niestety nie dzialalo, byc moze zle konfiguruje zarzadzanie zrodlem danych przez springa?

Maciej Matecki pisze...

Sprawdziłem i faktycznie auto działa dobrze w przypadku DBCP natomiast C3P0 w dalszym ciągu nawiązuje dużą liczbę połączeń.