- 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 연동' 카테고리의 다른 글
@Transactional 과 Test code 고찰 - 개발자들의 생각 모음 (0) 2024.04.22 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 다음글이전글이전 글이 없습니다.댓글