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 수 찾는 방법
- 모니터링 환경 구축 (서버 리소스, 서버 스레드 수, DBCP 등)
- 백엔드 시스템 부하 테스트 (JMeter, Gatling, nGrinder 등)
- 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.