Aurora MySQL의 숨겨진 idle close 동작 — HikariCP "Failed to validate connection" 추적기
백엔드
Aurora MySQL의 숨겨진 idle close 동작 — HikariCP "Failed to validate connection" 추적기
두줄요약
Aurora MySQL에서 HikariCP의 idle connection 검증 실패 원인을 추적해 비표준 timeout 동작을 확인했습니다. interactive_timeout 이 keepalive 보다 작으면 비활성 연결이 먼저 끊길 수 있음을 정리했습니다.
문제 상황
- HikariCP에서
Failed to validate connectionWARN 로그가 분당 다수 발생 - keepaliveTime 30초보다 먼저 DB 쪽에서 connection 이 끊기는 현상
원인 분석
- 표준 MySQL의
wait_timeout단독 적용이라는 가정과 실제 동작이 불일치 interactive_timeout변경만으로 WARN 이 즉시 멈춘 점으로 비표준 idle 종료 동작 확인- Aurora MySQL 에서
wait_timeout과interactive_timeout중 작은 값이 effective timeout 으로 적용
해결 방법
- DB 파라미터에서
interactive_timeout을 keepalive 주기보다 충분히 크게 조정 - HikariCP keepalive 시간과 Aurora idle timeout 간 간격 재검토
구조와 흐름
- community MySQL의 one-thread-per-connection 모델과 Aurora의 thread-pool + monitor thread 모델 차이 설명
- Aurora 에서 idle connection 을 별도 모니터 thread 가 주기적으로 정리하는 메커니즘 정리
주의할 점
- JDBC가 non-interactive라 해도 Aurora에서는
interactive_timeout이 영향 - 짧은 idle 값에서는 monitor 주기 때문에 타이밍 편차 발생 가능
