클라이언트에서 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

https://stackoverflow.com/questions/2757549/org-postgresql-util-psqlexception-fatal-sorry-too-many-clients-already

https://stackoverflow.com/questions/47252026/how-to-increase-max-connection-in-the-official-postgresql-docker-image

'SQL' 카테고리의 다른 글

SQL - order by pk의 함정  (0) 2024.11.01

+ Recent posts