Mini

[DB] Connection Pool 본문

CS/DB

[DB] Connection Pool

Mini_96 2024. 8. 26. 23:31

* 의문 : 

https://sidorares.github.io/node-mysql2/docs/examples/connections/create-connection

 

createConnection | Quickstart

For queries please see the Simple Queries and Prepared Statements examples.

sidorares.github.io

공식문서 연결방법에 createConnection vs createPool 두 방법이 있길래, 비교해보고자 한다.

공식문서에도 커넥션 풀이 더 좋다고 써있다.

* create Connection의 단점 

db 연결비용은 매우 비싸다.

이를 요청이올때마다 연결을시작하고

요청이 끝나면 연결을 끊고 ... 반복하는게 너무 비효율적이고 비싸다.

 

* 해결 : 커넥션 풀

 

* 개념

커넥션 풀 (Connection Pool) 이란 간단하게 얘기하면 클라이언트 요청이 오면 connection을 주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식을 말합니다.

데이터베이스 연결 및 데이터베이스 읽기/쓰기 작업과 관련된 오버헤드를 줄이는 것이 주 목적인 잘 알려진 데이터베이스와 관련된 일종의 패턴입니다.

* 실무 팁 : 요청시간이 너무긴 응답은 취소시켜버리기

db 메모리에 맞춰서 maxConnection 을 설정해야한다.

 

* 내 프로젝트에 적용(타임아웃)

현재 설정값 확인
나도 30초로 설정함

 

* 내 프로젝트에 적용(커넥션제한)

현재 우분투의 메모리는 8192

쓰레드수 = 8192 * 1024 * 1024 / 12582880 == 682

this.pool = mysql.createPool({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
    waitForConnections: true,
    connectionLimit: 300,
    queueLimit: 0
});

일단 우분투내에서  db용 메모리가 절반이라고 가정하고, 절반인 300개로 설정하였다.

 

* 레퍼런스

https://d2.naver.com/helloworld/5102792

https://jojoldu.tistory.com/634

 

NodeJS 와 PostgreSQL Connection Pool

Database에 관해 기본적인 id/pw 외에 해야할 설정들이 여러개 있는데요. 그 중 실제 서비스 운영에 가장 중요한 설정 중 하나가 이전 글인 쿼리 타임아웃 과 함께 커넥션 풀 (Connection Pool) 설정입니

jojoldu.tistory.com

https://kimdubi.github.io/mysql/timeout/

 

MySQL의 timeout 설정

MySQL의 timeout 설정 sleep 세션 client-mysql 서버와 연결 후 다음 query 수행까지 대기중인 상태의 세션 sleep 세션이 너무 많고 정리가 안되는 경우 connection full 로 인해 신규 세션 접속이 불가능해지고 se

kimdubi.github.io