DB Connection Pool
DB Connection Pool
DB Connection
- 애플리케이션에서 DB에 연결하기 위해서 다음과 같은 과정을 거침
- DB 드라이버를 통해 DB와 애플리케이션 연결
- TCP 소켓 열기
- TCP 소켓을 이용해 데이터 통신
- DB 연결 닫기
- TCP 소켓 닫기
- 이렇게, DB에 연결 하고 해제하는데에는 많은 비용 소요
- DB에 쿼리를 보내고 작업하는 시간보다도 많이 소요될 수 있음
DB Connection Pool
- 매 요청마다 DB 연결을 수립하는 것은 비효율적
- DB Connection Pool(DBCP)이란 미리 여러 개의 DB 커넥션을 객체로 만들어서 저장해둔 Pool
- WAS 등의 DB가 필요한 애플리케이션에서 DB가 필요할 때 마다 DBCP에서 커넥션을 건네받음
- 이후 사용을 마치면 반납함. 이 때도 DBCP의 커넥션은 항상 열려있음
- 연결을 열고 닫는 데 비용이 줄어듦
HikariCP
- DBCP 프레임워크 중 하나로, 가장 많이 사용되는 프레임워크가 HikariCP
- Spring boot에 내장된 JDBC의 DB 커넥션 풀링 프레임워크
- 바이트코드 단위까지 극단적으로 최적화가 되어 있어 다른 프레임워크 대비 압도적인 성능 자랑
Connection Pool Size
- Connection Pool의 크기가 너무 작으면 deadlock 문제가 발생 가능
- 반면 크기가 너무 크면 메모리 낭비가 발생
- 여기에 따르면 다음 값이 deadlock이 발생하지 않을 connection pool의 최소 크기
전체 스레드 갯수 * (한 스레드가 동시에 필요한 커넥션 수 - 1) + 1
- Deadlock 예방을 위한 최소 조건이므로, 상황에 따라 더 크게 늘려야 할 수도 있음
References
- https://hudi.blog/dbcp-and-hikaricp/
- https://code-lab1.tistory.com/209
- https://techblog.woowahan.com/2663/