우리는 최대 절전 모드 MySQL 연결과 비슷한 문제가 발생했습니다. 그래서 우리는 다음과 같은 구성으로, C3P0를 시도 :
<property name=c3p0.acquire_increment>1</property>
<property name=c3p0.idle_test_period>3600</property>
<property name=c3p0.max_statements>0</property>
<property name=c3p0.min_size>1</property>
<property name=c3p0.timeout>3605</property>
<property name=hibernate.c3p0.preferredTestQuery>select 1;</property>
최대 절전 모드 connection_pool 크기가이 시간 제한 문제가 사라 만든 1
로 설정했다. 그러나 우리는 또 다른 문제에 직면하기 시작했습니다. 오래 기다려. 초당 5-6 개의 요청을받는 서비스 (jboss에서 실행되는 서블릿)가 있습니다. 모든 요청은 최대 절전 모드를 통해 mysql에 연결해야한다. 대부분의 요청은 5 ~ 6 번째 요청마다 삽입/업데이트로 선택합니다. 일반적으로 우리에 대한 요청 서비스 시간은 선택시 2-3ms이고 삽입/업데이트시 40-50ms입니다. 그러나 위의 C3P0 구성을 사용한 후 업데이트를 완료 한 모든 요청에 거의 4-5 분이 걸리는 것으로 나타났습니다! 로그를 보면 무작위로 선택 요청이 중단되어 업데이트 요청을 받고 서비스 한 후에 만 완료 할 수있는 것으로 보입니다.
C3P0 구성을 제거하면 위의 문제가 해결됩니다. 누군가가 우리가 잘못하고있는 것을 제안 할 수 있습니까?
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://xxx.xxx.xxx</property>
<property name="connection.username">xxx</property>
<property name="connection.password">xxx</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="show_sql">true</property>
<!-- Transaction isolation 2 = READ_COMMITTED -->
<property name="connection.isolation">2</property>
<property name="connection.autocommit">true</property>
<!-- configuration pool via c3p0-->
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.idle_test_period">3600</property> <!-- seconds -->
<property name="c3p0.max_size">1</property>
<property name="c3p0.max_statements">0</property>
<property name="c3p0.min_size">1</property>
<property name="c3p0.timeout">3605</property> <!-- seconds -->
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>
</session-factory>
</hibernate-configuration>
연결이 유효한지 테스트하려면 연결에'isValid'를 사용 했습니까? 그렇지 않은 경우 다시 연결하십시오. 나는 이것이 서버 설정을 변경하지 않고도 문제를 해결해야한다고 생각한다. – Jus12