사용자 도구

사이트 도구


java:database:hikaricp

HikariCP

  • BoneCP 보다 더 빠른 Connection Pool.
  • 현재 훨씬 더 활발하게 개발이 진행되고 있다. Hibernate도 기본 커넥션 풀로 지원하고 있다.

주의점

  • HikariCP는 시간에 매우 민감하다. 서버의 시간을 NTP로 동기화해야만 한다. 안그러면 Pool Wait 시간이 무한정 늘어나거나 하는 현상이 발생할 수 있다.
    • 가상 머신 사용시에 Supervisor의 시간에 의존하면 안되고 VM 자체가 NTP 동기화가 돼 있어야만 한다.
    • Do not rely on hypervisor settings to “synchronize” the clock of the virtual machine. Configure time-source synchronization inside the virtual machine.
    • 이는 시간에 민감하게 작동하는 모든 Java 애플리케이션/라이브러리와 상관이 있다.
  • maxlifetime 은 항상 DB가 접속을 끊는 시간(MySQL의 경우 wait_timeout) 값 보다 짧아야만 한다

Performance Tuning

leak-detection-threashold

  • leakDetectionThreshold
    • 0이면 검출하지 않음.
  • 특정 시간 이내에 커넥션이 반환이 안 되면 connection leak 으로 판단하고 leak 을 일으킨 stack trace 를 로그로 남기는 기능이 있음.
  • 단, 이것은 진짜 leak이 아니고 지정 시간이 지나도 쿼리가 계속 실행될 경우, leak-detection 으로 판단하기도 하기 때문에 혼란을 줄 수 있다.
  • 따라서 이 값을 max-lifetime보다 작게 주는 것이 좋다.
    • Connection leak detection triggered for, Apparent connection leak detected
WARN 924 --- [l-1 housekeeper] com.zaxxer.hikari.pool.ProxyLeakTask     : Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@ffd3737 on thread http-nio-80-exec-8, stack trace follows

java.lang.Exception: Apparent connection leak detected
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128) ~[HikariCP-2.7.9.jar:na]
....

Stacktrace 를 잘 보면 leak 을 일으킨 호출 코드를 볼 수 있다.

max-lifetime

connectionInitSql

  • 커넥션을 맺을 때 항상 실행할 SQL 명령

참고

java/database/hikaricp.txt · 마지막으로 수정됨: 2024/05/30 09:20 저자 kwon37xi