DBCP(커넥션풀)

김민규·2023년 12월 12일
0
post-thumbnail

DBCP(커넥션풀)

서버와 데이터베이스간의 소통을 위해서는 연결을 해야 한다.
이 연결은 TCP기반으로 동작하기에 연결에 3way-handshake, 연결 해제에 4way-handshake를 진행하므로 해당 과정에서 시간이 많이 소모된다.

매번 서버와 DB간의 connection에 대한 시간적인 비용을 절약하고자 미리 연결해 놓은 connection들을 모아둔 것을 DBCP(커넥션풀)라고 한다.

미리 커넥션풀을 생성해 놓는 것으로

  1. API요청
  2. 커넥션풀 할당
  3. 쿼리 요청
  4. 쿼리 응답
  5. 커넥션풀 반납

의 과정을 거쳐 서버와 DB간의 connection에 대한 시간적인 비용 없이 처리가 가능하다.

DB 서버의 설정

max_connections : client와 맺을 수 있는 최대 커넥션의 수

wait_timeout : 커넥션이 inactive할 떄 다시 요청이 오기까지 얼마의 시간을 기다린 뒤 연결을 끊을 것인지 결정 / 시간 내에 요청이 오면 해당 시점부터 시간 초기화

DBCP 설정

minimumidle : pool에서 유지하는 최소한의 idle 커넥션 수

maximumPollSize : pool이 가질 수 있는 최대 커넥션 수 (idle(inactive) 과 active(in-use) 커넥션을 합친 수)

  • idle 커넥션 수가 minimumidle 보다 작고, 전체 커넥션 수도 maximumPollSize 보다 작다면 추가로 커넥션을 만든다.

minimumidle : 2, maximumPollSize : 4 인경우

  1. 커넥션풀 2개 생성 후 유지 (idle : 2, active : 0, total : 2)
  2. 하나의 커넥션풀이 연결되면 idle 커넥션 수가 1개가 되니 커넥션 추가 (idle : 2, active : 1, total : 3)
  3. 하나의 커넥션풀이 더 연결되면 idle 커넥션 수가 1개가 되니 커넥션 추가 (idle : 2, active : 2, total : 4)
  4. 하나의 커넥션풀이 더 연결되면 idle 커넥션 수가 1개가 되나, maximumPollSize 보다 높아지므로 추가하지 않음 (idle : 1, active : 3, total : 4)
  5. 커넥션들이 커넥션풀로 돌아온다면 2개의 idle 커넥션만 존재하도록 2개의 커넥션 연결 해제 (idle : 2, active : 0, total : 2)
    권장사항은 minimumidle 과 maximumPollSize를 동일하게 설정한다.
    → 트래픽이 몰릴 경우 커넥션 연결과 해제 시 시간소요를 줄이고자

maxLifetime : pool에서 커넥션의 최대 수명
active상태일 경우 pool로 반환 후 제거

  • pool로 반환이 안되면 maxLifetime 작동 안함
  • DB의 wait_timeout 보다 몇 초 짧게 설정하여야 함
    • 동일하다면 데이터 전송 과정에서 연결이 끊길 수 있기 때문

적절한 커넥션의 수를 찾기 위해서?

nGrinder와 같은 시스템 부하 테스트를 통하여 RPS(requset per second) 와 ART(avg response time)을 확인하여 설정한다.
→ 부하가 심해지는 시점의 커넥션의 수를 파악하여 max_connections, maximumPoolSize등을 처리

RPS : 초 당 몇 개의 요청을 처리할 수 있는지
ART : 요청 처리 시 평균적인 소요 시간

profile
개발꿈나무

0개의 댓글

관련 채용 정보