wait_timeout 확인법 / 설정 방법 / 히카리 / hikari cp / connection pool 과 연동 / 어떻게 연동
HikariCP의 maxLifeTime 과 MySQL의 wait_timeout
- HikariCP’s max_timeout 값은 ms 이고, MySql 의 wait_timeout 값은 s 이다.
- hikari 의 connection 은 사용중일때 꺼지진 않는다.(An in-use connection will never be retired)
- maxLifeTime 은 mysql 의 wait_timeout 값보다 몇분 낮게 잡아야 한다.
그래야 broken connection excpetion 을 피할 수 있다.
- java - HikariCP and maxLifetime - Stack Overflow
- https://github.com/brettwooldridge/HikariCP/tree/2.3.x : 2.3.x 에서는 wait_timeout 보다 최소 30초작게.
- https://github.com/brettwooldridge/HikariCP/issues/1085#issuecomment-365372801 : HikariCP 2.7.7 에서 maxLifeTime 을 30-90 초 정도 MySQL 보다 적게 잡으라고 제안한다.
- https://github.com/brettwooldridge/HikariCP/tree/HikariCP-4.0.3 : 4.0.3 에서는 몇초정도 짧으면 된다고 한다.
MySql 의 wait_timeout 과 interactive_timeout
- https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout
thread 가 시작할때, session 의 wait_timeout 값은 global wait_timeout 값으로 초기화 된다. 또는 global interactive_timeout 값으로 초기화 된다. client 가 interactive client 이면, interactive_timeout 을 사용하고, 그렇지 않으면 wait_timeout 을 사용한다.
- interactive_timeout : https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_interactive_timeout
서버가 interactive connection 에서 close 하지 않고 activity 를 기다리는 시간이다.(second 로 표현된다.)
CLIENT_INTERACTIVE
option 을 사용하는 client 가 interactive client 이다. (즉, mysql_real_connect() 를 사용해서 접속할때CLIENT_INTERACTIVE
옵션을 사용하면 된다.)
- wait_timeout : https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout
서버가 noninteractive connection 에서 close 하지 않고 activity 를 기다리는 시간이다.(second 로 표현된다, 기본값은 28800s 이다.)
다음 query 를 통해 확인할 수 있다.
SHOW variables like "%_timeout%";
SHOW global VARIABLES LIKE '%_timeout%';
wait_timeout 값 설정 요령
- configuration - Choosing a value for wait_timeout & interactive_timeout in MySQL config? - Server Fault : 낮은값에서 부터 조금씩 올리는 것을 추천
See Also
- HikariCP
issue, #863, Keeping Connection Open in MySql Transactions
- sql 을 수행하지 않고, wait_timeout 보다 connection 을 오래 잡아두면 transaction 중간에 connection 을 lost 할 수 있다.
- deadlocks/lock timeouts
- Lost connection to MySQL server during query : Forums : PythonAnywhere
댓글 없음:
댓글 쓰기