본문으로 건너뛰기
client_connection_check_interval

client_connection_check_interval

버전기본값context타입
140userinteger
150userinteger
160userinteger
170userinteger
180userinteger
190userinteger

쿼리 실행 중에 client가 여전히 연결되어 있는지 주기적으로 확인하는 간격을 정한다. 단위 없이 값을 주면 밀리초로 해석하며, 기본값은 0으로 확인 기능이 꺼져 있다.

확인은 socket을 polling하는 방식으로 이루어진다. 커널이 connection이 닫혔다고 보고하면 오래 걸리는 쿼리를 더 일찍 중단시킬 수 있다. 이 기능은 Linux, macOS, illumos, BSD 계열이 제공하는 커널 이벤트에 의존하므로 그 외 운영체제에서는 쓸 수 없다. 기본값 그대로 두면 서버는 socket으로 데이터를 주고받는 다음 시점에야 연결 끊김을 알아차리므로, client가 사라진 뒤에도 무거운 쿼리가 끝까지 도는 일이 생긴다.

네트워크 장애를 포함한 모든 상황에서 커널이 끊어진 TCP connection을 일정 시간 안에 확실히 감지하게 하려면, 운영체제의 TCP keepalive 설정이나 PostgreSQL의 tcp_keepalives_idle, tcp_keepalives_interval, tcp_keepalives_count를 함께 조정해야 할 수 있다.

운영 노트: 애플리케이션이 쿼리를 던져 놓고 timeout으로 먼저 끊어버리는 패턴이 잦은 환경에서 유용하다. client는 이미 떠났는데 서버에서 리포트성 쿼리가 계속 자원을 소모하는 상황을 줄여준다. 다만 이 확인은 client가 socket을 닫은 경우를 잡는 것이고, 네트워크 자체가 끊긴 경우는 keepalive 설정 없이는 감지가 늦을 수 있다.

출처: PostgreSQL 18 문서