Ведение журнала пула соединений C3P0

У меня есть веб-приложение, которое использует c3p0 в качестве пула соединений. мы используем спящий режим в качестве инструмента orm. В последнее время мы получаем исключения тайм-аута соединения. Чтобы отладить эти исключения, я включил ведение журнала для C3p0 и получил некоторую информацию в журналах. Может ли кто-нибудь помочь мне разобраться в этом.

DEBUG 2012-08-05 14:43:52,590 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] com.mchange.v2.c3p0.stmt.GooGooStatementCache: checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 2; checked out: 0; num connections: 1; num keys: 2

из вышеизложенного я могу заметить, что общий размер пула соединений равен 2. Количество проверенных соединений равно 0. Это правильно? И что такое num_connections и num keys в приведенном выше?

Спасибо..


person Npa    schedule 05.08.2012    source источник


Ответы (2)


То, что вы видите в приведенном вами фрагменте журнала, является снимком кэша операторов, а не пула соединений. На момент регистрации этого сообщения было два кэшированных PreparedStatements, принадлежащих одному соединению. Ни одно из Заявлений не было проверено/использовано.

Надеюсь, это поможет!

person Steve Waldman    schedule 05.08.2012
comment
Спасибо, Стив... Я изменил регистратор в log4j.properties, и теперь у меня другой набор журналов. - person Npa; 06.08.2012
comment
DEBUG 05-08-2012 19:44:02,526 [Таймер-2] com.mchange.v2.resourcepool.BasicResourcePool: трассировка com.mchange.v2.resourcepool.BasicResourcePool@5c73f637 [управляется: 4, не используется: 4, исключено: 0 ] (например, com.mchange.v2.c3p0.impl.NewPooledConnection@74904d13) можете ли вы сказать мне, что означают в этом журнале управляемые, неиспользуемые и исключенные? - person Npa; 06.08.2012
comment
управляемый означает количество Соединений в пуле; unused означает количество Соединений, которые в настоящее время не проверены клиентами и поэтому доступны в пуле; исключенные означают соединения, которые проверены, но в которых произошла какая-то ошибка или сбой, например, c3p0 пометил их для удаления, а не для повторного включения, когда клиент пытается вернуть их обратно в пул. - person Steve Waldman; 06.08.2012

Исключения могут быть связаны с неправильным определением настроек C3P0. Убедитесь, что вы ссылаетесь на правильный файл jar. Ваше приложение должно быть связано с "hibernate-c3p0*.jar", а не с "c3p0*.jar". В файле hibernate.cfg должно быть определено свойство hibernate.connection.provider_class, чтобы настройки c3p0 вступили в силу. Ниже пример настроек

<property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property>

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>

Запись журнала указывает, что в пуле есть 4 соединения, и все 4 соединения доступны для использования приложением. Выполнение запроса к вашей базе данных, чтобы перечислить все активные соединения, покажет соединения пула. Например, в Mysql вы можете запустить «show processlist;», чтобы увидеть эти соединения.

person girish    schedule 06.08.2012