Post

DBCP (Database Connection Pool)

DBCP (Database Connection Pool)
  • 매번 새로운 Database Connection을 생성하는 것은 비용이 크고, 비효율적이다. 때문에 별도의 Connection Pool을 사용해 미리 생성해두고, 필요할 때 가져다 사용하는 방식을 사용한다.

Connection Pool 설정 (HikariCP)

  • minimumIdle : pool에서 유지할 최소 idle connection 수
    • idle connection : 사용되지 않는 connection
  • maximumPoolSize : pool에서 가질 수 있는 최대 connection 수 (idle + active(in-use))
    • idle connection수가 minimumIdle 보다 작고, 전체 connection 수가 maximumPoolSize 보다 작으면, 새로운 connection을 생성해서 pool에 추가한다. (maximumPoolSize가 minimumIdle보다 우선순위가 높음)
  • maxLifetime : pool에서 connection의 최대 생존 시간
    • maxLifetime을 넘기면 idle일 경우 pool에서 제거하고, active일 경우 pool로 반환된 후 제거
    • DB의 wait_timeout 보다 작아야 함

Database 설정 (MySQL)

  • max_connections : 최대 동시 접속자 수
  • wait_timeout : connection이 inactive 할 때 다시 요청이 오기까지 얼마의 시간을 기다린 뒤에 close할 것인지를 결정

DBCP 설정과 DB 설정을 구분지어 설정해야 하고, 두 설정을 잘 조정하여 적절한 connection 수를 찾아야 한다.


적절한 connection 수 찾는 방법

  1. 모니터링 환경 구축 (서버 리소스, 서버 스레드 수, DBCP 등)
  2. 백엔드 시스템 부하 테스트 (JMeter, Gatling, nGrinder 등)
  3. request per second (RPS), average response time (ART) 등을 측정하여 적절한 connection 수를 찾음

서버 부하 상황 별 대응 방법

  • 백엔드 서버, DB서버의 CPU, Memory, Disk I/O, Network I/O 등의 리소스가 부족한 경우
    • 리소스 추가 (ex> 서버 추가, DB서버 추가, cache layer 추가, sharding 등)
  • thread per request 모델이라면 active thread 수가 적절한지 확인
    • 전체 스레드 중 active 스레드의 비율이 높다면, 스레드의 총 개수를 늘려야 함
  • DBCP의 active connection 수가 적절한지 확인
    • DBCP의 active connection 수가 적절하지 않다면, 사용할 백엔드 서버 수를 고려하여 DBCP의 maximumPoolSize를 늘려야 함

성능 측정 지표

  • Thoroughput: 시간당 처리량 TPS, RPS등으로 불리며 시스템이 얼마나 많은 요청을 처리할 수 있는지를 나타냄
  • Latency: 응답 시간, ART 등으로 불리며 시스템이 얼마나 빠르게 응답하는지를 나타냄 (ART + Network Latency)
  • TPS (Transaction Per Second) : 초당 처리할 수 있는 트랜잭션 수
  • RPS (Request Per Second) : 초당 처리할 수 있는 요청 수
  • ART (Average Response Time) : 평균 응답 시간 (시스템이 요청을 받은 시점부터 응답을 보낼 때까지의 시간)

참고 & 출처

This post is licensed under CC BY 4.0 by the author.