Connection Pool 크기와 타임아웃 설정

connection pool

기본개념

1. Connection Pool의 역할

  • Connection Pool은 애플리케이션이 데이터 베이스와 통신하기 위해 미리 연결을 생성 해 두는 저장소.
  • 연결을 매번 생성/해제 하면 성능이 저하되므로 재사용 가능한 연결 풀을 통해 성능을 최적화한다.

2. 주요 파라미터

  • Maximum Pool Size: 동시에 사용할 수 있는 최대 연결 수.
  • Minium Idle Connections: 사용되지 않을 때 유지할 최소 연결 수.
  • Connection Timeout: 연결 요청 시 대기 할 최대 시간.

Connection Pool 크기 설정

왜 중요하가?

  • 연결 풀 크기가 너무 작으면 요청이 대기 상태가 되어 처리 속도가 느려짐.
  • 연결 풀 크기가 너무 크면 DB서버에 과부하가 발생하여 성능이 저하된다.

단계별 설정

  1. 트래픽 분석
    • 애플리케이션의 동시 사용자 수와 요청 패턴을 분석.
    • ex: 애플리케이션 초당 평균 100개의 요청이 발생하고 각 요청이 50ms동안 연결을 유지한다
      = 100 * 0.05
      = 5(최소 연결 필요) 
  2. DB서버의 제한 확인
    • DB서버가 지원할 수 있는 최대 연결 수를 확인.
    • ex: MySQL SHOW VARIABLES LIKE 'max_connections' ;
  3. 기본 설정
    • 최소 연결 수는 트래픽 분석 결과의 80%로 설정
    • 최대 연결 수는 DB 서버의 최대 연결 수의 80%를 넘지 않도록 설정.
  4. 로드 테스트
    • JMeter, Gating 등의 도구로 예상 트래픽을 시뮬레이션 하여 성능 확인.
    • 연결 풀 부족 시 대기시간이 늘어나는지 확인.

Connection Timeout 설정

  1. 왜 중요한가?
    • 타임아웃을 짧게 설정하면 불필요한 대기 없이 오류를 빠르게 감지할 수 있다.
    • 너무 길게 설정하면 장애 원인 파악이 어려워진다.
    • 너무 짧게 설정하면
      • 네트워크가 느리거나 서버가 과부하일 경우 요청이 처리되기 전 연결이 끊어질 수 있다.
      • 재시도 과정에서 네트워크 대역폭과 서버리소스가 불필요하게 소비된다.
  2. 설정 단계
    1. 요청 응답시간 확인
      • 평균적 DB응답 시간은 수십ms에서 수백ms 수준.
      • ex: 쿼리가 200ms 내외로 완료된다면 타임아웃을 500ms ~ 5000ms 로 설정
    2. Connection Timeout 설정
      • HicariCP의 connection-timeout은 견결을 기다릴 최대 시간이다. (default: 3000ms)
      • 실무에서는 보통 2000~10000ms 사이로 설정한다.
    3. Validation Timeout 추가.
      • 연결 유효성을 검사하는 시간. 일반적으로 1000~5000ms 설정
    4. 실패시 재시도정책
      • 타임아웃 발생 시 재시도를 설정하거나 Circuit Breaker를 사용한다.

성능 최적화

  1. 모니터링 도구를 활용한다.
    • Actuator의 /metrics 엔드포인트에서 hicaricp.connections.*지표를 확인.
    • 그라파나, 프로메테우스와 통합하여 커넥션 풀 상태 모니터링
  2. 쿼리 효율성 확인.
    • 슬로우쿼리가 풀을 점유하지 않도록 주기적으로 쿼리 성능 분석.
    • mysql의 경우 slow_query_log 활성화
  3. 스케일링 전략
    • 트래픽이 지속적으로 증가할 경우 DB와 애플리케이션 인스턴스 수를 증가시킨다.
반응형

+ Recent posts