-
DBMS Connection pool 이 뭐임TodayILearned/TILWIL 2022. 9. 30. 01:36
postgresql Connection pool
RDBMS connection pool
DBMS는 자체적으로 서버와 클라이언트를 갖고있다. (데이터를 요청하는쪽이 클라이언트, 요청을 받아 처리하는쪽이 서버.)
connection pool 이란 DB의 서버-클라이언트간의 연결 객체를 의미한다.
데이터베이스 연결에 드는 비용
데이터베이스에 연결하는 것은 아래처럼 여러 단계를 거쳐야하는 리소스가 많이 필요한 작업이다. 그러나 연결을 닫지않고 열린 상태로 유지하는 것 또한 리소스를 소모한다.
- 애플리케이션은 연결을 하기위해 DB driver를 사용한다.
- 네트워크 소켓이 애플리케이션과 DB를 연결하기위해 열린다.
- 유저 인증됨
- 작업이 완료되고 연결은 닫힌다.
- 네트워크 소켓이 닫힌다.
DB connection pooling을 하는 이유
간단한 작업의 경우, 연결을 하고, 닫는 프로세스에 들이는 비용을 걱정하지 않아도 된다. 하지만 애플리케이션이 확장됨에 따라 연결을 지속적으로 열고, 닫는데 드는 비용이 더 많이 들고 애플리케이션에 영향을 줄 수 있다. 따라서, 새로운 연결을 열고 닫는 것 보다 열린 상태로 유지하고 필요한 작업에 전달하는 방법이 더 효율적이다.
적절한 Connection pool의 크기?
최대 connection pool이 실제 연산의 빈도수보다 적으면, 가능한 연결이 열릴 때 까지 기다려야하므로 대기시간이 발생한다. 반면 너무 많은 연결을 열어놓는다면 한정된 서버 프로세서가 Connection pool을 연결하는것에 대한 대기시간이 생길 수 있다.
따라서, 완벽한 공식은 없지만 아래 문서가 참고할 만 하여 첨부했다.
- 많은 수의 connection pool도 답이 아니고
- 적은 수의 connection pool도 답이 아니다.
- 최대 pool의 절반 정도로 시작해서 성능에 따라 조절하는 것이 좋다.
https://docs.digitalocean.com/products/databases/postgresql/how-to/manage-connection-pools/
How to Manage Connection Pools for PostgreSQL Database Clusters :: DigitalOcean Documentation
How to Manage Connection Pools for PostgreSQL Database Clusters Validated on 8 August 2019 • Posted on 14 February 2019 PostgreSQL is an open source, object-relational database built with a focus on extensibility, data integrity, and speed. Its concurren
docs.digitalocean.com
TypeORM에서의 connection pool
queryRunner를 통해 connection pool을 관리할 수 있다.
작업이 완료된 연결은 다른 작업을 위해 release 시켜줘야한다.
make sure to release it when it is not needed anymore to make it available to the connection pool again:
await queryRunner.release()
queryRunner instance는 EntityManager 인스턴스가 가지고있는 메서드를 갖고있다.
EntityManager는 엔티티를 삽입,수정,삭제,업데이트하는 역할을한다.참고한 글
https://www.cockroachlabs.com/blog/what-is-connection-pooling/
What is Connection Pooling, and Why Should You Care
Database connections can get expensive at scale. Pooling connections can help, so here's what connection pooling is and how to do it!
www.cockroachlabs.com
https://jojoldu.tistory.com/634
NodeJS 와 PostgreSQL Connection Pool
Database에 관해 기본적인 id/pw 외에 해야할 설정들이 여러개 있는데요. 그 중 실제 서비스 운영에 가장 중요한 설정 중 하나가 이전 글인 쿼리 타임아웃 과 함께 커넥션 풀 (Connection Pool) 설정입니
jojoldu.tistory.com
'TodayILearned > TILWIL' 카테고리의 다른 글
Nest Cache (0) 2022.09.28 gRPC 동작순서 (0) 2022.08.12 asynchronous-synchronous programming (0) 2022.05.02 왜 타입스크립트 마이그레이션을 해야할까 (0) 2022.05.01 클래스 개념과 프로토타입 개념 (0) 2021.12.15