[DB] 적절한 connection Pool 개수에 대한 생각

한호성·2024년 6월 18일
0

성능측정

목록 보기
7/7

Introduction

앞선 글에서 DBCP-개념 에 대해서 알아보았습니다.
그렇다면 적절한 Connection Pool을 어떻게 설정할까요?
이와 관련하여 정리하는 글 입니다.

DBCP를 사용하는 이유 생각해보자

DBCP를 만드는 가장 큰 이유는 DB와 WAS 사이의 connection을 만드는 비용절감이라고 생각합니다.

비용절감이라는 단어는 어떤 것을 의미할까요?
제 개인적인 생각으로는 "연결할 때 걸리는 시간" 이라고 생각합니다.

다른 관점에서 보면, 메모리를 추가적으로 쓰면서 connection을 유지하고 있기 때문에 resource를 사용하고 있다고 볼 수 있지만, 이 비용보다, 빠르게 데이터를 가져오도록 하는 것이 더 이점이 있기 때문에 DBCP를 사용한다고 생각합니다.

정리하자면, connection pool을 유지하기 위한 리소스 vs 빠르게 데이터를 가져올 수 있는 이점에서 후자의 경우가 훨씬 더 큰 효용을 가져오기 때문에 DBCP를 사용한다 생각합니다.
(아마도 connection 을 만드는 과정에 TCP 3-way-handshake와 같은 네트워크 비용이 들기 때문이라 생각합니다.)

적절한 Connecion의 개수는 어떻게 생각하면 좋을까?

connection 적정개수

데이터베이스의 주요 병목 현상은 CPU, 디스크, 네트워크 3가지 부분이다.

만약 디스크 I/O, 네트워크를 제외하고 생각한다면, 데이터베이스의 적절한 connection pool 개수는 CPU의 core 개수와 같을 것이다. 왜냐하면, 각 core는 각각의 작업을 수행할 수 있는 단위인데, 각 core가 각각의 connection 1개씩만 갖고 해당 작업을 처리한다면 이상적일 것이다.

하지만 여기서 전제를 다시 생각해보자 디스크 I/O 가 존재한다면, 해당 core에 진행중인 thread 는 blocking이 되고, context switching에 의해 다른 thread의 일을 진행할 것이다. 이런 경우라면, core 개수당 connection 1개씩만 갖고 있다면, 빠르게 요청이 들어오는 thread들이 blocking 걸리게 되면서, 빠르게 작업을 쳐내지 못할 가능성이 있다.

이러한 이유로 HikariCP 공식문서에서는 다음과 같은 공식을 제안했다고 한다.

connections = core_count * 2 + effectivespindle_count
core_count = 디스크 및 네트워크 CPU의 속도차이로 인한 여유 시간을 활용하기 위해 2를 곱해준다

effectivespindle_count = 하드디스크는 하나의 spindle을 갖는다, spindle은 데이터베이스 서버가 관리할 수 있는 동시 I/O 요청 수를 의미한다. 디스크가 n개 존재하면, spindle_count는 n이 될 수 있다.

적정한 connection Pool 개수

Hikari CP에서는 wiki에서는 아래와 같은 개수를 설정했을 때, Deadlock이 나지 않는다고 한다.
Tn * (Cm -1) + 1

Tn은 WAS의 전체 쓰레드 개수, Cm은 쓰레드가 작업을 수행하기 위해 동시에 필요한 DB connection 개수를 의미한다.

Tn의 값은 부하테스트 모니터링을 통해 active thread 최대개수를 측정해서 값을 넣어주면 되나?란 생각이 들었다.

그렇지 않는다면, Spring boot의 threads max size는 default가 200이라고 알고 있는데 위와 같은 공식을 넣을 경우 connection Pool의 개수가 말이 안되게 늘어나기 때문이다..

이렇게 정리하고 나니, 공식은 공식대로 적용해보면서, 지금 내 서비스에 맞는 connection pool을 찾아가는 과정이 필요하겠다란 결론에 도달했다.

그래도 공식의 의미를 기본 개념으로써 기억해두자.

Reference

[https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing#the-formula][https://techblog.woowahan.com/2664/]
[https://dallog.github.io/hikari-cp-1-theory/]

profile
개발자 지망생입니다.

0개의 댓글