일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Monthly Checklist
- terraform
- 실용주의 프로그래머
- PostgreSQL
- AWS
- 지표
- 생성 패턴
- 도커 주의사항
- 티스토리챌린지
- leetcode
- study
- Til
- docker
- Rust
- 오블완
- 14일 공부
- amazon ecs
- AWS 비용 절감
- MAPF
- 논문 정리
- Playwright
- 신혼 여행
- 경로 계획 알고리즘
- github
- DevOps
- 청첩장 모임
- 디자인 패턴
- 구조 패턴
- Go-lang
- ssh
- Today
- Total
밤 늦게까지 여는 카페
PostgreSQL 에러 "too many connections ~" 대응 방법 본문
PostgreSQL을 사용하다 보면 종종 "too many connections ~" 에러를 접한 적이 있으신가요?
이 에러는 말 그대로 데이터베이스가 허용할 수 있는 최대치의 연결이 맺어져서 더 이상의 연결을 거절하는 것입니다.
그러면 어떤 상황에서 데이터베이스에 연결이 많이 맺어질까요?
제가 겪었던 상황은 크게 2가지였습니다.
- 서버에 데이터 조회 요청이 순간적으로 많이 몰릴 때
- 쿼리 실행 중 에러가 발생하여 연결이 Idle인채로 남아있을 때
각각의 상황을 살펴보도록 하겠습니다.
1. 서버에 데이터 조회 요청이 순간적으로 많이 몰릴 때
1. 데이터베이스의 스케일링
2. API 서버에서의 연결 수 제어
3. 캐시 레이어의 추가로 데이터베이스 부하 조절
이 문제를 해결할 수 있는 대표적인 방법으로는 데이터베이스의 스케일링이 있습니다.
수직, 수평 스케일링 둘다 가능합니다.
AWS RDS의 경우에는 메모리와 최대 연결 수가 비례하기 때문에 메모리가 큰 티어를 사용하는 것이 한가지 방법이 되겠습니다.
혹은 데이터 조회 요청을 받는 API 서버에서 연결 수를 제어하는 방법도 있을 수 있고, 캐시 레이어를 추가하는 것으로 데이터베이스의 부하를 줄이는 방법도 있을 수 있습니다.
2. 쿼리 실행 중 에러가 발생하여 연결이 Idle인채로 남아있을 때
근본적으로는 에러가 발생하는 잘못된 쿼리를 고쳐야 합니다. 하지만 이미 발생한 문제는 해결해야겠죠?
다음 쿼리를 통해서 지금 데이터베이스에서 실행 중인 쿼리들을 살펴볼 수 있습니다.
SELECT * FROM pg_stat_activity
그러면 다음과 같은 결과를 확인할 수 있습니다.

여기서 state 컬럼의 값이 Idle인 쿼리들을 다음 2가지 명령어로 종료시킬 수 있습니다.
SELECT pg_cancel_backend(pid); //SIGINT
SELECT pg_terminate_backend(pid); //SIGTERM
pg_cancel_backend의 경우 SIGINT를 보내고, pg_terminate_backend의 경우에는 SIGTERM을 보냅니다.
pg_terminate_backend를 사용하면 관련된 프로세스들이 전부 종료되기 때문에
급하지 않은 상황에는 pg_cancel_backend의 사용을 권장드립니다.
도움이 되셨을까요? PostgreSQL을 사용하면서 접할 수 있는 다른 문제들도 내용을 정맇
'데이터베이스 > PostgresQL' 카테고리의 다른 글
PostgreSQL constraint - DB가 할 수 있는건 DB한테 맡기자! (0) | 2022.10.21 |
---|---|
PostgreSQL autoincrement - Oracle DB는 SERIAL이 없어요? (0) | 2022.10.15 |
PostgreSQL EXPLAIN을 이용한 쿼리 성능 분석 - 언제까지 쿼리 하나하나 시간 측정하면서 튜닝할 거에요! (0) | 2022.10.09 |
PostgreSQL 계정 비밀번호 바꾸기 (0) | 2022.10.09 |
PostgreSQL 기간 별 검색 최적화 (1) | 2022.10.02 |