statement_timeout
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | user | integer |
| 15 | — | user | integer |
| 16 | — | user | integer |
| 17 | — | user | integer |
| 18 | — | user | integer |
| 19 | — | user | integer |
지정한 시간보다 오래 걸리는 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 문서