log_min_duration_statement
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | superuser | integer |
| 15 | — | superuser | integer |
| 16 | — | superuser | integer |
| 17 | — | superuser | integer |
| 18 | — | superuser | integer |
| 19 | — | superuser | integer |
지정한 시간 이상 실행된 statement의 실행 시간(duration)을 log에 남긴다. slow query 추적의 가장 기본이 되는 파라미터다.
예를 들어 250ms로 설정하면 250ms 이상 걸린 모든 SQL statement가 duration과 함께 기록된다. 단위 없이 값을 주면 밀리초로 해석하며, 0이면 모든 statement의 duration을 기록하고 -1(기본값)이면 기능을 끈다. pg_stat_statements 같은 누적 통계와 달리 개별 실행 건의 발생 시각과 실제 쿼리 텍스트가 그대로 남기 때문에, 애플리케이션에서 최적화가 덜 된 쿼리를 특정하는 데 효과적이다.
log_min_duration_sample과의 관계도 알아둘 필요가 있다. 이 설정이 sampling보다 우선하므로, duration이 이 값을 넘는 statement는 표본 추출 대상이 아니라 무조건 기록된다. 두 파라미터를 함께 쓰면 “이 시간 이상은 전부, 그 아래 구간은 표본만 기록"하는 계층 구조를 만들 수 있다. extended query protocol을 쓰는 클라이언트는 Parse·Bind·Execute 단계의 duration이 각각 따로 기록된다.
log_statement와 함께 사용할 때는 log_statement 때문에 이미 기록된 쿼리 텍스트가 duration 메시지에 중복 출력되지 않는다. syslog를 쓰지 않는다면 log_line_prefix에 PID나 session ID를 넣어 두 메시지를 이어 볼 수 있게 해두는 것이 좋다.
출처: PostgreSQL 18 문서