lock_timeout
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | user | integer |
| 15 | — | user | integer |
| 16 | — | user | integer |
| 17 | — | user | integer |
| 18 | — | user | integer |
| 19 | — | user | integer |
테이블·인덱스·row 같은 데이터베이스 객체의 lock을 얻으려고 지정한 시간 이상 기다리는 statement를 중단시킨다.
시간 제한은 lock 획득 시도 하나하나에 개별적으로 적용된다. LOCK TABLE이나 NOWAIT 없는 SELECT FOR UPDATE 같은 명시적 lock 요청은 물론, 암묵적으로 획득하는 lock에도 똑같이 걸린다. 단위 없이 값을 주면 밀리초로 해석하며, 0(기본값)이면 비활성이다.
statement_timeout과 달리 lock을 기다리는 동안에만 발동한다. statement_timeout이 0이 아니라면 lock_timeout을 그와 같거나 더 크게 설정하는 것은 의미가 없다 — 항상 statement timeout이 먼저 발동하기 때문이다. log_min_error_statement가 ERROR 이하로 설정돼 있으면 timeout으로 중단된 statement가 로그에 남는다. postgresql.conf에서 전역으로 설정하는 것은 모든 세션에 영향을 주므로 권장하지 않는다.
운영 노트: 서비스 중인 테이블에 DDL을 실행할 때는 세션 단위로 짧은
lock_timeout(예: 몇 초)을 걸어 두는 습관이 사고를 막는다. ALTER TABLE이 ACCESS EXCLUSIVE lock을 기다리는 동안 그 뒤로 들어오는 쿼리가 전부 대기 행렬에 쌓이는데, lock_timeout이 있으면 DDL이 제때 lock을 얻지 못할 때 스스로 물러나 서비스 영향을 최소화할 수 있다.출처: PostgreSQL 18 문서