커넥션 풀 크기 계산 공식
1. 첫번째
커넥션 풀 크기를 계산하기 위한 일반적인 공식은 다음과 같습니다:
커넥션 풀 크기=(CPU 코어 수×2)+유휴 커넥션 수\text{커넥션 풀 크기} = \left( \text{CPU 코어 수} \times 2 \right) + \text{유휴 커넥션 수}
여기서,
- CPU 코어 수: 시스템의 물리적 또는 논리적 CPU 코어 수입니다.
- 유휴 커넥션 수: 일반적으로 최소 유휴 커넥션 수로 설정한 값입니다.
이 공식을 사용하면 CPU 자원을 최대한 활용하면서도 적절한 수의 유휴 커넥션을 유지할 수 있습니다.
예시
예를 들어, 만약 시스템에 4개의 CPU 코어가 있고, 최소 유휴 커넥션 수를 5로 설정한다면:
커넥션 풀 크기=(4×2)+5=8+5=13\text{커넥션 풀 크기} = (4 \times 2) + 5 = 8 + 5 = 13
따라서, 최적의 커넥션 풀 크기는 13이 됩니다.
추가적인 고려사항
- 애플리케이션 동시성: 동시 사용자 수가 많을 경우 풀 크기를 늘릴 필요가 있습니다. 반대로 동시성 요구가 낮다면 풀 크기를 줄여도 됩니다.
- 데이터베이스 제한: 데이터베이스가 허용하는 최대 커넥션 수를 초과하지 않도록 주의합니다.
- 애플리케이션의 성격: 데이터베이스에 대한 요청이 많거나 트랜잭션이 긴 경우 커넥션 풀 크기를 늘릴 필요가 있습니다.
실전 적용
dataSourceClassName=com.zaxxer.hikari.HikariDataSource
maximumPoolSize=10
minimumIdle=5
maxLifetime=1800000
idleTimeout=600000
connectionTimeout=30000
connectionTestQuery=SELECT 1
추가적인 설정 고려 사항
- Leak Detection Threshold:
- 커넥션 누수 감지를 위해 설정합니다.
- 예시: leakDetectionThreshold=2000 (2초)
- Initialization Fail Fast:
- 초기화 시 데이터베이스 연결에 실패할 경우 즉시 예외를 발생시킵니다.
- 예시: initializationFailTimeout=1
- Auto Commit:
- 커넥션 풀의 커넥션이 자동 커밋 모드인지 설정합니다.
- 예시: autoCommit=false
최적화 팁
- 모니터링: 실제 운영 환경에서 HikariCP의 성능을 모니터링하고, 메트릭을 수집하여 병목 현상을 분석합니다.
- 트랜잭션 관리: 짧고 효율적인 트랜잭션을 유지하여 커넥션 풀의 부하를 줄입니다.
- 동시성 테스트: 다양한 동시성 시나리오를 테스트하여 최적의 커넥션 풀 크기를 찾습니다.
HikariCP의 설정은 애플리케이션의 특성과 데이터베이스 환경에 따라 다를 수 있으므로, 설정값을 조정하고 테스트하는 과정을 통해 최적의 성능을 얻는 것이 중요합니다.
2. 두번째
HikariCP의 최적 커넥션 수를 계산하는 공식은 다음과 같은 요소를 고려합니다:
- 애플리케이션의 동시성 수준 (N): 동시 실행되는 요청 수
- CPU 코어 수 (C): 서버의 물리적 CPU 코어 수
- 애플리케이션의 대기 비율 (W): 대기 시간 비율 (0과 1 사이의 값)
공식: Maximum Pool Size=N×(1−W)C\text{Maximum Pool Size} = \frac{N \times (1 - W)}{C}
이 공식은 다음과 같은 방법으로 유도됩니다:
- 애플리케이션의 동시 실행 요청 수를 고려하여 필요한 총 커넥션 수를 결정합니다.
- CPU 코어 수를 기준으로 최적화하여 각 요청이 병목 없이 처리되도록 합니다.
- 대기 비율을 반영하여 실제로 필요한 커넥션 수를 조정합니다.
예시
- 동시성 수준 N=100N = 100
- CPU 코어 수 C=8C = 8
- 대기 비율 W=0.5W = 0.5 (50% 시간은 대기 상태)
Maximum Pool Size=100×(1−0.5)8=508=6.25\text{Maximum Pool Size} = \frac{100 \times (1 - 0.5)}{8} = \frac{50}{8} = 6.25
따라서, 최적의 커넥션 풀 크기는 약 6-7개입니다. 이 값을 실제로 적용할 때는 테스트와 조정을 통해 최적화를 진행합니다.
#참고사이트
성능을 최적화 해보자 - HikariCP 편
프로젝트에서 성능을 최적화하기 위해 connectionPool 설정
velog.io
https://netmarble.engineering/hikaricp-options-optimization-for-game-server/