PostgreSQL - Client Connection Defaults - DB 서버에서 오래걸리는 쿼리 종료하기

2023. 6. 18. 02:51데이터베이스/postgreSQL

docs 캡쳐

 

키워드

  • PostgreSQL Server Configuration
  • Statement Behavior 설정
  • Statement_timeout
  • 지정된 시간보다 오래 걸리는 명령문을 중단하는 옵션

 

 

질문

  • 실수로 굉장히 오랜시간이 걸리는 쿼리를 DB로 날렸을 경우, DB가 이런 쿼리를 알아서 종료해 줄 수 없을까?
  • postgreSQL을 사용하고 있는 상황

 

 

방법

  • statement_timeout (integer) 옵션을 사용한다.
  • 해당 옵션에 대한 설명은 아래와 같다.
    • 지정된 시간보다 오래 걸리는 명령문을 중단함.
    • log_min_error_statement가 ERROR 이하로 설정되면 타임아웃된 sql문도 기록
    • 인자값을 단위 없이 지정하면 밀리초로 간주됩니다. 값이 0(기본값)이면 제한 시간이 비활성화됩니다.
    • 시간 초과는 명령이 서버에 도착한 시간부터 서버에서 명령이 완료될 때까지 측정됩니다.
    • 단일 단순 쿼리 메시지에 여러 SQL 문이 나타나는 경우 시간 제한은 각 문에 개별적으로 적용됩니다. (PostgreSQL 13 이전 버전에서는 일반적으로 타임아웃을 전체 쿼리 문자열에 적용하는 것으로 처리했습니다.)
    • 확장 쿼리 프로토콜에서 쿼리 관련 메시지(Parse, Bind, Execute, Describe)가 도착하면 타임아웃이 실행되기 시작하고 완료되면 취소됩니다.
  • 해당 설정은 DB 서버 내부에 설정하는 것으로 설정 명령은 외부에서 내릴 수 있으나, 특정 명령을 통해 sql을 직접 중단하는 행위는 DB 엔진자체에서 막는 것으로 보인다.

 

 

참고자료

 

 

 

사용 시 주의 사항

  • postgresql.conf에서 statement_timeout을 설정하는 것은 모든 세션에 영향을 미치기 때문에 권장되지 않음.
  • 서비스에 지정값보다 오래 걸리는 쿼리가 있으면 안됨.