Connection Pool
라고도 부릅니다.데이터베이스 풀(Database Pool)의 주체는 쓰레드 풀(Thread)이다.
다수의 사용자들이 동시다발적으로 데이터베이스의 연결(Connection)을 요청한다면 최악의 경우 서버가 다운
될 수 있습니다.
비용이 많이 들기
때문에, 매번 연결을 생성 및 해제하는 대신 미리 생성된 연결들을 풀(pool)에 저장해 두고 재사용하는 방식을 사용합니다.
1. 서버(WAS)는 미리 DB와 일정 수의 connection을 맺은 후 connection 객체를 Pool에 저장합니다.
2. 사용자의 요청이 발생하게 되면 서버(WAS)는 Pool에 connection을 요청합니다.
3. connection을 얻은 후 쿼리를 실행하여 데이터를 read / write 합니다.
4. connection을 Pool에 반납합니다.
- 데이터 베이스 반복적으로 생성하고 해제하는
오버헤드(OverHead)
를 줄일 수 있습니다.connection 수
를 제한할 수 있어서 과다한 요청으로 인한 서버의 자원 고갈을 막을 수 있습니다.- 응용 프로그램의
성능을 향상
시킬 수 있습니다.- 동시에 여러 사용자가 데이터베이스에 접근하는 경우에도
효율적인 연결 관리
가 가능합니다.- 데이터
처리 속도
가 빨라집니다.
- 요청이 들어올 때마다 Connection을 생성한다면 속도가 느려져서 성능에 문제가 생길 수 있습니다.
- connection 객체는 메모리를 많이 사용하기 때문에 오히려 성능을 떨어뜨릴 수도 있습니다.
- 최대로 저장되는
connection 수
는 정해져 있기에 많은 요청이 발생한 경우 connection이 모두 사용 중이라면 반납될 때까지 대기해야합니다.
그렇지 않다. Connection의 주체는 Thread이므로 Thread와 함께 고려해야합니다.
- CASE1) Thread Pool 크기 < Connection Pool 크기
:Thread Pool에서 트랜잭션을 처리하는 Thread가 사용하는 Connection 외에 남는 Connection은 실질적으로 메모리 공간만 차지하게 됩니다.
- CASE2) Thread Pool 크기와 Connection Pool 모두 크기 증가
: Thread 증가로 인해 더 많은Context Switching
이 발생합니다.
- Disk 경합 측면에서
성능 한계
가 발생합니다.
: 데이터베이스는 하드 디스크 하나 당 하나의 I/O를 처리하므로 블로킹이 발생합니다.
즉, 특정 시점부터는 성능적인 증가가 Disk 병목으로 인해 미비해집니다.
✅ Thread Pool 수 가 Connection Pool 수 보다 많은게 좋다.