문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
java:database:hikaricp [2018/02/28 08:09] kwon37xi |
java:database:hikaricp [2024/05/30 09:20] kwon37xi [max-lifetime] |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== HikariCP ====== | ====== HikariCP ====== | ||
- | * [[http://brettwooldridge.github.io/HikariCP/|HikariCP]] | + | * [[https://github.com/ |
* [[java: | * [[java: | ||
* 현재 훨씬 더 활발하게 개발이 진행되고 있다. Hibernate도 기본 커넥션 풀로 지원하고 있다. | * 현재 훨씬 더 활발하게 개발이 진행되고 있다. Hibernate도 기본 커넥션 풀로 지원하고 있다. | ||
- | ===== Performance | + | ===== 주의점 ===== |
+ | * HikariCP는 시간에 매우 민감하다. 서버의 시간을 NTP로 동기화해야만 한다. 안그러면 Pool Wait 시간이 무한정 늘어나거나 하는 현상이 발생할 수 있다. | ||
+ | * 가상 머신 사용시에 Supervisor의 시간에 의존하면 안되고 VM 자체가 NTP 동기화가 돼 있어야만 한다. | ||
+ | * [[https:// | ||
+ | * **Do not rely on hypervisor settings to " | ||
+ | * 이는 시간에 민감하게 작동하는 모든 Java 애플리케이션/ | ||
+ | * maxlifetime 은 항상 DB가 접속을 끊는 시간([[database: | ||
+ | * [[java: | ||
+ | |||
+ | |||
+ | ===== Performance | ||
* [[https:// | * [[https:// | ||
+ | ===== leak-detection-threashold ===== | ||
+ | * '' | ||
+ | * '' | ||
+ | * 특정 시간 이내에 커넥션이 반환이 안 되면 connection leak 으로 판단하고 leak 을 일으킨 stack trace 를 로그로 남기는 기능이 있음. | ||
+ | * 단, **이것은 진짜 leak이 아니고 지정 시간이 지나도 쿼리가 계속 실행될 경우, leak-detection 으로 판단**하기도 하기 때문에 혼란을 줄 수 있다. | ||
+ | * 따라서 이 값을 '' | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | |||
+ | < | ||
+ | WARN 924 --- [l-1 housekeeper] com.zaxxer.hikari.pool.ProxyLeakTask | ||
+ | |||
+ | java.lang.Exception: | ||
+ | at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java: | ||
+ | .... | ||
+ | |||
+ | Stacktrace 를 잘 보면 leak 을 일으킨 호출 코드를 볼 수 있다. | ||
+ | </ | ||
+ | |||
+ | ===== max-lifetime ===== | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | * **'' | ||
+ | * HikariCP는 max-lifetime에 의한 커넥션 교체를 별도 쓰레드에서 성능저하 없이 부드럽게 수행한다. | ||
+ | * [[https:// | ||
+ | * MySQL Replication(or Aurora Cluster)와 HikariCP 문제 | ||
+ | * master 다운되고 그 상태 유지시에 slave도 작동을 안함. | ||
+ | * 이 문제를 조금이나마 피하려면 '' | ||
+ | |||
+ | ===== connectionInitSql ===== | ||
+ | * 커넥션을 맺을 때 항상 실행할 SQL 명령 | ||
+ | |||
+ | ===== 참고 ===== | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// |