DB Connection Pool 사용 중 가끔 데이터베이스 커넥션이 끊기는 현상 발생.


[오류로그 일부]

[org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was62250 seconds ago.The last packet sent successfully to the server was 62250 seconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.] 


해당 문제를 해결하기 위해서 'wait_timeout' 시간을 늘리거나 'autoReconnect=true' 설정을 사용하라는 문구가 보인다.


[wait_timeout]

- wait_timeout으로 설정된 시간이 초과되면 커넥션을 종료시키는 옵션이다.

- 옵션의 시간을 무한정 늘릴 수 없기 때문에 근본적인 해결책으로 보기 어렵다.


[autoReconnect=true]

- 해당 옵션은 쿼리 수행 다음 DB 세션에 문제가 있으면 단순히 SQLException을 리턴한 다음 재접속을 시도한다.

- 만약 트랜잭션 구동 환경이라면 수행중이던 작업은 롤백처리되어야 하고, 남은 작업들은 수행되지 말아야 하는데 해당 옵션은 이러한 작업을 처리하지 않는다.

- 따라서 해당 옵션 사용시 트랜잭션에 대한 처리를 따로 해주어야 한다는 문제가 있다.


==> 위와 같은 문제로 다른 파해법을 찾아 보니 validationQuery 라는 것을 찾게 되었다.


[validationQuery]

- 커넥션의 유효성을 검사하는 옵션

- 해당 옵션은 단순 검증을 위한 옵션이기 때문에 자원 소비를 최소화 하기 위해 아래와 같은 Query를 사용하도록 권장한다.

오라클 : SELECT 1 FROM DUAL

MSSQL : SELECT 1

MySQL : SELECT 1

CUBRID : SELECT 1 FROM DB_ROOT

- 설정

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    <property name="driverClassName" value="${Globals.DriverClassName}" />

    <property name="url" value="${Globals.Url}" />

    <property name="username" value="${Globals.UserName}"/>

    <property name="password" value="${Globals.Password}"/>

    <property name="defaultAutoCommit" value="true"/>

    <property name="validationQuery" value="select 1"/>

    <property name="testWhileIdle" value="true"/>

    <property name="timeBetweenEvictionRunsMillis" value="7200000"/>

</bean> 


[참고]

http://uip80.tistory.com/entry/24%EC%8B%9C%EA%B0%84-%EB%8F%99%EC%95%88-connection-%EC%98%A4%EB%A5%98-mysql

http://kshmc.tistory.com/entry/MyBatis-Datasource-%EC%B0%B8%EA%B3%A0

http://www.mybatis.org/mybatis-3/ko/configuration.html

http://d2.naver.com/helloworld/5102792

'SQL > MySQL' 카테고리의 다른 글

MySQL 데이터타입  (0) 2015.12.28
Posted by OnewayK
,