본문으로 건너뛰기

statement_timeout

버전기본값context타입
14userinteger
15userinteger
16userinteger
17userinteger
18userinteger
19userinteger

지정한 시간보다 오래 걸리는 statement를 중단시킨다.

시간은 명령이 서버에 도착한 시점부터 서버가 완료할 때까지 측정한다. 단위 없이 값을 주면 밀리초로 해석하며, 0(기본값)이면 비활성이다. simple-query 메시지 하나에 여러 SQL statement가 담겨 있으면 timeout은 statement마다 따로 적용된다(PostgreSQL 13 이전에는 대체로 전체 쿼리 문자열에 한 번 적용됐다). extended query protocol에서는 쿼리 관련 메시지(Parse·Bind·Execute·Describe)가 도착하면 timeout이 시작되고 Execute나 Sync 메시지가 완료되면 해제된다. log_min_error_statement가 ERROR 이하로 설정돼 있으면 중단된 statement가 로그에 남는다.

postgresql.conf에서 전역으로 설정하는 것은 권장하지 않는다 — 모든 세션에 적용되므로 인덱스 생성, 배치, 백업처럼 정상적으로 오래 걸리는 작업까지 함께 끊어버린다.

운영 노트: 폭주 쿼리로부터 서버를 지키는 가장 기본적인 안전장치다. 전역 대신 ALTER ROLE ... SET statement_timeout이나 ALTER DATABASE ... SET으로 애플리케이션 계정에만 상한을 거는 방식이 안전하고, 유지보수·배치 계정은 별도 값으로 분리한다. 무거운 리포트 쿼리는 세션에서 SET statement_timeout으로 일시적으로 풀어 주면 된다.

출처: PostgreSQL 18 문서