commit_delay
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | superuser | integer |
| 15 | — | superuser | integer |
| 16 | — | superuser | integer |
| 17 | — | superuser | integer |
| 18 | — | superuser | integer |
| 19 | — | superuser | integer |
WAL flush를 시작하기 전에 인위적인 지연을 추가한다. 단위 없이 값을 주면 마이크로초로 해석하며, 기본값은 0(지연 없음)이다. superuser와 적절한 SET 권한을 가진 사용자만 변경할 수 있다.
시스템 부하가 충분히 높아 지연 시간 동안 다른 트랜잭션들이 commit 준비를 마칠 수 있다면, 여러 트랜잭션이 WAL flush 한 번으로 함께 commit되어 group commit 처리량이 올라간다. 대신 각 WAL flush의 latency는 최대 commit_delay만큼 늘어난다. 다른 트랜잭션이 준비되지 않으면 지연은 그냥 낭비이므로, flush 직전에 활성 트랜잭션이 commit_siblings 개 이상일 때만 지연을 수행한다. 또한 fsync가 꺼져 있으면 지연하지 않는다.
PostgreSQL 9.3부터는 flush 준비가 된 첫 process(leader)만 설정된 시간을 기다리고, 뒤따르는 process들은 leader의 flush가 끝날 때까지만 기다리는 방식으로 동작해 그 이전 버전보다 훨씬 효율적이다.
운영 노트: 동시 commit이 몰리는 고부하 OLTP에서만 의미가 있는 파라미터다. 부하가 낮은 시스템에서 켜면 latency만 늘어난다. 조정한다면 수십~수백 마이크로초 수준에서 실측으로 검증하며 올리는 것이 안전하다.
출처: PostgreSQL 18 문서