HikariCP 커넥션 풀 크기, 정말 클수록 좋을까
풀 크기를 10에서 100까지 바꿔 가며 처리량과 지연 시간을 측정해 본 실험 기록
목차
실험 배경
“커넥션이 부족하면 풀을 늘리면 된다”는 말을 자주 듣는다. 정말 그런지 직접 재 보았다.
측정 환경
- PostgreSQL 16, 4 vCPU
- Spring Boot 3, HikariCP 기본 설정
- k6로 동시 사용자 200명
spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 3000
결과
| pool size | p99 latency | TPS |
|---|---|---|
| 10 | 180ms | 1,950 |
| 20 | 120ms | 2,310 |
| 100 | 410ms | 1,720 |
왜 100에서 느려졌나
DB 서버의 CPU 코어 수보다 훨씬 많은 커넥션이 동시에 쿼리를 돌리면 컨텍스트 스위칭과 락 경합이 늘어난다.
직접 돌려 보기
풀 크기를 키우면 처리량이 늘다가, DB 코어 수를 크게 넘어서면 오히려 응답이 느려진다.
정리
connections = (core_count * 2) + effective_spindle_count 공식은 출발점일 뿐, 결국 측정이 답이다.