클라이언트에서 api를 쏘는데 갑자기 sorry, too many client already 라는 문구와 함께 api가 깨지는 현상이 발생했다.
이는 database의 connection 개수가 초과되었다는 뜻으로,
원인 파악 이후 max_connection을 늘려주든, 오용되고 있는 connection을 끊어주든 해야한다.
postgresql.conf 를 열어보면 max_connections 라는 필드가 있고, 기본 설정은 25인듯 하다.
SHOW max_connections;
위의 쿼리를 통해서도 확인이 가능하다.
max_connections는 확인했고, 이제는 클라이언트들이 연결되었는지 확인해보자.
SELECT * FROM pg_stat_activity where datname = '데이터베이스 이름';
위의 쿼리를 통해 어떤 쿼리들이 현재 작동중이며 어떤 클라이언트가 connection을 물고 있는지 확인이 가능하다.
간혹 너무 오래 걸리는 쿼리가 계속 작동 중이라 connection 풀이 고갈되는 경우가 있는데, 이럴 때는
SELECT pg_cancel_backend(pid int);
위의 쿼리를 통해 중지 시킬수 있다.
나의 경우에는 다행히 오용되고 있는 connection은 없었고, 데이터 파이프라인과 api 등 요청이 많아서 그런 것으로 확인되어, 단순히 postgresql.conf의 max_connections를 적절히 늘려주는 것으로 해결했다.
docker를 사용하는 환경에서는 여기에 있는 방법으로 해결할 수 있다.
References
'SQL' 카테고리의 다른 글
SQL - order by pk의 함정 (0) | 2024.11.01 |
---|