본문으로 건너뛰기

commit_delay

버전기본값context타입
14superuserinteger
15superuserinteger
16superuserinteger
17superuserinteger
18superuserinteger
19superuserinteger

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 문서