deadlock_timeout
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | one second ( 1s ) | superuser | integer |
| 15 | one second ( 1s ) | superuser | integer |
| 16 | one second ( 1s ) | superuser | integer |
| 17 | one second ( 1s ) | superuser | integer |
| 18 | one second ( 1s ) | superuser | integer |
| 19 | one second ( 1s ) | superuser | integer |
lock을 기다리기 시작한 뒤 deadlock 여부를 검사하기까지 대기하는 시간을 정한다.
deadlock 검사는 비용이 큰 작업이라 서버는 lock 대기가 발생할 때마다 검사를 실행하지 않는다. 실제 운영 환경에서 deadlock은 흔치 않다고 낙관적으로 가정하고, 일단 lock을 기다리다가 이 시간이 지나서야 검사를 시작한다. 단위 없이 값을 주면 밀리초로 해석하며, 기본값은 1초다. 실무에서 쓸 만한 값 중 사실상 가장 작은 수준이다.
값을 키우면 불필요한 deadlock 검사에 낭비되는 시간이 줄지만, 실제 deadlock 에러 보고는 그만큼 늦어진다. 부하가 큰 서버라면 값을 올리는 편이 낫고, 이상적으로는 평균 transaction 시간보다 길게 잡아 검사가 시작되기 전에 lock이 풀릴 확률을 높이는 것이 좋다. superuser와 적절한 SET 권한을 가진 사용자만 변경할 수 있다.
log_lock_waits가 켜져 있으면 이 파라미터는 lock 대기 로그 메시지를 남기기까지의 대기 시간도 함께 결정한다.
운영 노트: lock 대기 지연을 조사할 때는
deadlock_timeout을 평소보다 짧게 잡고 log_lock_waits를 켜면 어떤 세션이 어떤 lock에서 기다리는지 로그로 추적할 수 있다. 조사가 끝나면 원래 값으로 되돌리는 것을 잊지 말아야 한다. 검사 자체가 비싸므로 상시로 너무 짧게 두면 부하가 커진다.출처: PostgreSQL 18 문서