Database Pool(데이터베이스 풀)

2021. 8. 16. 16:48DataBase

Connection Pool

 

클라이언트의 요청에 따라 각 어플리케이션의 스레드에서 데이터베이스에 접근하기 위해서는 Connection 필요하다.

DB Connection Pool manager가 일정의 connection을 여러 개 생성해 두어 저장해 놓은 캐시(공간), 또는 connection을 연결하고 있다가, 요청이 들어오면 할당을 해주고, 없으면 기다리게 하는 기법


Connection Pool 단계

pool 속에 미리 생성된 conection을 가지고 사용후 pool에 다시 반환

  • 웹 컨테이너가 실행되면서 DB와 연결된 Connection 객체들을 미리 생성하여 pool에 저장한다.
  • DB에 요청 시, pool에서 Connection 객체를 가져와 DB에 접근한다.
  • 처리가 끝나면 다시 pool에 반환한다.

Connection Pool 특징

  • 매 연결마다 Connection 객체를 생성하고 소멸시키는 비용을 줄일 수 있습니다.
  • 미리 생성된 Connection 객체를 사용하기 때문에, DB 접근 시간이 단축됩니다. -> 어플리케이션의 실행속도 증가
  • Connection 객체를 재사용하기 때문에 개수가 더 늘지 않는다.
  • DB에 접근하는 Connection의 수를 제한하여, 메모리와 DB에 걸리는 부하를 조정할 수 있습니다. -> 동시 접속자가 많아도 웹 어플리케이션이 쉽게 다운되지 않는다.
  • 모든 요청이 DB에 접근하고 있고 남은 Conncetion이 없다면, 해당 클라이언트는 대기 상태로 전환시키고 Pool에 Connection이 반환되면 대기 상태에 있는 클라이언트에게 순차적으로 제공한다.
  • Connection도 객체이기 떄문에 메모리 공간 차지
  • Connection 개수를 잘못 설정할 경우 쓸모없는 Connection이 발생하거나, 처리하지 못하는 대기 요청이 많아질 수도 있다.

Thread Pool

미리 생성한 pool 내의 Thread를 소멸시키지 않고 재사용하여 효율적으로 자원을 활용하는 기법이다.

 

WAS(Web Application Server)에서 Thread Pool과 Connection Pool의 Thread와 Connection의 수는 메모리와 직접적으로 관련이 있다.

Connection과 Thread 수를 많이 설정하면 메모리를 많이 차지하고, 반대로 적게 설정할 경우 처리하지 못하는 대기 요청이 많아진다.



출처:

https://lovestudycom.tistory.com/entry/DB-POOL-이란 

https://delf-lee.github.io/post/connection-pool/

https://brownbears.tistory.com/289

'DataBase' 카테고리의 다른 글

Replication(리플리케이션)  (0) 2021.08.25
효과적인 쿼리 저장  (0) 2021.08.25
Optimizer(최적화의 원리)  (0) 2021.08.24
Transaction(트랜잭션)  (0) 2021.08.17
정규화(Normalization) - 1차 2차 3차 BCNF  (2) 2021.08.16