* 의문 :
https://sidorares.github.io/node-mysql2/docs/examples/connections/create-connection
공식문서 연결방법에 createConnection vs createPool 두 방법이 있길래, 비교해보고자 한다.
* create Connection의 단점
db 연결비용은 매우 비싸다.
이를 요청이올때마다 연결을시작하고
요청이 끝나면 연결을 끊고 ... 반복하는게 너무 비효율적이고 비싸다.
* 해결 : 커넥션 풀
* 개념
커넥션 풀 (Connection Pool) 이란 간단하게 얘기하면 클라이언트 요청이 오면 connection을 주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식을 말합니다.
데이터베이스 연결 및 데이터베이스 읽기/쓰기 작업과 관련된 오버헤드를 줄이는 것이 주 목적인 잘 알려진 데이터베이스와 관련된 일종의 패턴입니다.
* 실무 팁 : 요청시간이 너무긴 응답은 취소시켜버리기
* 내 프로젝트에 적용(타임아웃)
* 내 프로젝트에 적용(커넥션제한)
쓰레드수 = 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
https://kimdubi.github.io/mysql/timeout/
'CS > DB' 카테고리의 다른 글
[DB] DATETIME 타입에 DEFAULT 값으로 현재 시간 입력 (0) | 2024.08.27 |
---|---|
[CS] 멘토링 24.8.27. // db, redis, kafka (0) | 2024.08.27 |
[DB] unknown database error 해결 (0) | 2024.08.26 |
[DB] char VS varchar 선택기준 (0) | 2024.08.25 |
where IN 절의 한계, 해결 (0) | 2024.08.25 |