티스토리 뷰

프로그래밍/Back end

[Back end] HikariCP 설정

Reference M1 2021. 1. 29. 14:26

 

github.com/brettwooldridge/HikariCP

 

brettwooldridge/HikariCP

光 HikariCP・A solid, high-performance, JDBC connection pool at last. - brettwooldridge/HikariCP

github.com

 

Spring Boot 2.0부터 Default JDBC Connetion Pool HikariCP로 변경되었다. github 사이트에서는 zero-overhad 라면서 엄청난 속도의 향상과 신뢰성이 있다고 소개하고 있다. 일단 Spring Boot 2.0부터 Default로 적용되었으니 충분한 검증은 되었을 거라 생각된다. 변화에 맞춰 HikariCP설정 방법을 알아보자.

 

MySQL max_connections 확인

SHOW VARIABLES LIKE '%max_connect%';

MySQL 개발 서버의 max_connections 개수가 생각보다 적게 설정된 것도 문제지만, MySQL 설정 변경 없이 WAS에서 DB Conncetion 개수 조정하여 해결하는 방법을 택하였다. 실무에서 때에 따라 DBMS 설정을 수정할 수 없는 상황이 있기 때문이다.

 

기본적으로 DB Connection 설정은 Spring Boot를 Database보다 적게 설정해야 한다.

단위 값

  • DB - s
  • Spring Boot - ms

 

application.yml

spring:
    datasource:
        hikari:
            poolName: HikariCP
            connectionTimeout: 30000
            maximumPoolSize: 10
            maxLifetime: 1800000
            readOnly: false
  • connectionTimeout (default: 30000 / 30 sec) - 최소값 250ms
    Client가 pool에서 connection을 기다리는 최대 시간을 제어한다. 허용 가능한 wait time을 초과면 SQLException을 던진다.

 

  • idleTimeout (default: 600000 / 10 min) - 최소값 10000ms
    pool에서 유휴상태로 유지될 수 있는 최대 시간을 제어한다. 이 값은 minimumIdle 값이 maximumPoolSize 보다 작게 설정된 경우에만 작동된다. 

 

  • minimumIdle (default: maximunPoolSize와 동일)
    pool에서 유지할 유휴 최소 connetion 개수를 설정한다. 최적의 성능과 응답성을 요구한다면 이 값을 설정하지 않는 게 좋다.

 

  • maxLifetime (default: 1800000 / 30 min) - 최소값 30000ms
    connection 최대 유지시간을 제어한다. 사용 중인 connection은 폐기되지 않고, 사용이 끝난 connection만 제거된다. 이 값을 설정하는 것을 권장한다. 데이터베이스나 인프라의 적용된 connetion time limit 보다 작아야 한다.
    기존에는 connection을 유지하게 위해 SELECT 1 등의 쿼리를 주기적으로 날려 문제를 해결했지만, HikariCP는 maxLifetime 설정값에 따라 스스로 connection을 유지하고, maxLifetime이 지난 connection은 제거하고 생성하는 사이클이 반복된다.
    possibly consider using a shorter maxlifetime value 오류가 발생되면 maxLifetime 시간을 MySQL wait_timeout(default: 28800 / 8 hr) 시간보다 2~3초 짧게 설정하면 해결된다.

 

  • maxmunPoolSize (default: 10)
    유후 및 사용 중인 connection을 모두 포함하여 pool이 도달할 수 있는 최대 크기를 제어한다. 이 값은 실제 연결의 제어의 최대 수를 결정한다. 
    Connection is not available, request timed out after 30000ms 오류가 발생되면 pool locking(deadlock) 상태이다. 기본적으로 connection timeout은 30초인데 pool에서 connection을 30초 동안 획득하지 못한 것으로 판단하면 된다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함