• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • DBCP 설정 값 정하기
        2024년 05월 01일
        • starryeye
        • 작성자
        • 2024.05.01.:34

         

         

        DBCP 를 사용할 때 다양한 설정 값들이 있다.

        설정 값을 어떻게 정하는지에 대한 간단한 가이드를 포스팅 해보겠다.

        설명은 HikariCP 옵션으로 진행하겠다.

         

        maximumPoolSize

        Pool 이 제공할 수 있는 최대 커넥션 갯수이다. (idle + in-use)

         

        maximumPoolSize 설정 값을 정하기 위해서는..

        한 커넥션당 쿼리 실행 시간, 목표로하는 TPS 가 필요하다.

         

        최대 TPS = 1 커넥션 당 초당 요청 처리 개수 * 동시 커넥션 개수

        위는 TPS 의 계산식이다.

        여기서 우리는 동시 커넥션 개수 (maximumPoolSize) 를 구할 것이다.

         

        최대 TPS 는 목표로하는 TPS 이므로 알고 있는 값이다.

        1 커넥션 당 초당 요청 처리 개수는 1초를 1 커넥션당 쿼리 실행 시간으로 나눈 값이다.

        따라서..

        동시 커넥션 개수 = 목표로하는 TPS / (1 초 / 1 커넥션당 쿼리 실행 시간)

         

        계산 예시

        조건 1) 1 요청은 1 커넥션을 사용한다.

        조건 2) 1 요청의 쿼리 실행시간은 0.2 초

        조건 3) 목표 TPS 는 200

        -> maximumPoolSize 는..

        200 / (1초 / 0.2 초) = 40

        즉.. 한 커넥션당 쿼리 실행시간이 0.2 초 일 때, maximumPoolSize 를 40 개로 설정하면

        200 TPS 처리할 수 있다.

         

        주의사항

        위 예시조건에서 잘 계산해서 40 개의 maximumPoolSize 를 정해놨다고 치자..

        그런데..

        간헐적으로 1 초당 쿼리 실행시간이 1 초가 걸리는 느린쿼리가 10 개 발생한다면..

        1 초당.. 커넥션 40 개 중, 10 개는 하나의 요청만 처리한다. -> 10 TPS

        나머지 30 개는 1 초당 0.2 초가 걸리므로.. 1 / 0.2 * 30 -> 150 TPS

        즉, 160 TPS 가 되어버린다.

         

        결론..

        느린 쿼리를 염두해 두고.. maximumPoolSize 를 넉넉히 잡아야한다.

         

         

        connectionTimeout

        connectionTimeout 는 사용자가 connection 을 할당 받기(idle -> in-use) 까지의 대기 시간이다.

        connetion pool 이 모두 in-use 상태일 때 대기 시간이 발생한다.

        기본 값은 30000 ms 로 30 초이다.

        순간적으로 트래픽이 몰리면, 모든 스레드가 대기 상태에 빠질 수 있다. (client 가 오랜시간 응답을 대기하게됨)

        따라서, connectionTimeout 값을 2 초 정도로 설정하여 에러를 반환하더라도 응답성을 높이도록하자.

         

         

        maxLifeTime

        connection 의 최대 생존 시간이다.

        DB 자체적으로도 connection 최대 생존 시간이 존재하는데 그 설정 값보다 작아야한다.

        Application 에서 요청을 보내고 DB 에서 요청을 받는데 까지 시간이 존재하기 때문이다.

         

         

        keepAliveTime

        connection 연결 유지를 위해 특정 행동(keepalive)을 수행하는데 해당 행동의 빈도에 관한 설정이다.

        maxLifeTime 보다 작은 값이어야한다.

        maxLifeTime 과 마찬가지로 DB 에도 그러한 설정 값이 있다면 그 설정 값보다도 작아야한다.

         

         

        minimumIdle

        connection pool 에 유지할 Idle 상태의 connection 최소 갯수이다.

        기본 값이 maximumPoolSize 와 동일한 값이며 건드리지 말 것을 추천한다.

        maximumPoolSize 보다 작은 값을 사용하면..

        트래픽이 별로 없을 때는 DB 자원 사용을 줄이는 효과가 있으나..

        트래픽이 몰리는 상황에서는 성능 저하가 생기므로..

        maximumPoolSize 와 동일한 값을 사용하여..

        고정된 idle connection size 를 사용하도록 한다.

         

         

         

         

         

        'Spring > DB, Cache 연동' 카테고리의 다른 글

        DBCP (HikariCP)  (0) 2024.04.22
        Spring Data JPA (Hibernate), N + 1 Query Problem  (0) 2024.02.20
        Spring 과 JPA  (0) 2024.02.14
        JPA 등록, 기본 키 생성 전략  (0) 2023.06.19
        JPA 변경 감지와 플러시  (0) 2023.06.15
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바