2016년 12월 15일 목요일

wait_timeout관련


*디폴트 타임아웃 확인
show variables like '%timeout';

*정보 설명
connect_timeout  :  MySQL 서버 접속시에 접속실패를 메시지를 보내기까지 대기하는 시간

delayed_insert_timeout  :  insert시 delay될 경우 대기하는 시간

innodb_lock_wait_timeout  :  innodb에 transaction 처리중 lock이 걸렸을 시 롤백 될때까지 대기하는 시간.
innodb는 자동으로 데드락을 검색해서 롤백시킨다.

innodb_rollback_on_timeout  :  innodb의 마지막 구문을 롤백시킬지 결정하는 파라미터.
timeout은 진행중인 transaction을 중단하고 전체 transaction을 롤백하는 과정에서 발생한다.

interactive_timeout  :  활동중인 커넥션이 닫히기 전까지 서버가 대기하는 시간

net_read_timeout  :  서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

net_write_timeout  :  서버가 클라이언트에 데이터를 쓰는 것을 중단하기까지 대기하는 시간

slave_net_timeout  :  마스터/슬레이브로 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

table_lock_wait_timeout  :  테이블 락을 중단하기까지 대기하는 시간

wait_timeout  :   활동하지 않는 커넥션을 끊을때까지 서버가 대기하는 시간

* Solution.

1) autoreconnect=true // 트랜잭션 오류 가능성있음
- 커넥션이 끊어지면 자동 재접속
jdbc:mysql://(host):(port)/(db_name)?autoReconnect=true
ex) jdbc:mysql://127.0.0.1:3306/seoulnetworks?autoReconnect=true

2) validationQuery 사용 //추천
-Mysql
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
  <property name="validationQuery" value="select 1"/>
 </bean>

- Oracle
validationQuery="select 1 from dual"





댓글 없음:

댓글 쓰기