본문으로 건너뛰기
checkpoint_flush_after

checkpoint_flush_after

버전기본값context타입
14256kB on Linuxsighupinteger
15256kB on Linuxsighupinteger
16256kB on Linuxsighupinteger
17256kB on Linuxsighupinteger
18256kB on Linuxsighupinteger
19256kB on Linuxsighupinteger

checkpoint 수행 중 이 양보다 많은 데이터를 쓸 때마다 OS가 해당 write를 실제 스토리지로 내려보내도록 강제한다. 단위 없이 값을 주면 block(BLCKSZ, 보통 8kB) 단위로 해석하며, 유효 범위는 0(강제 writeback 비활성)에서 2MB까지다. 기본값은 Linux에서 256kB, 그 외 플랫폼에서는 0이다. postgresql.conf나 서버 커맨드라인에서만 설정할 수 있다.

이렇게 하면 커널 page cache에 쌓이는 dirty 데이터 양이 제한되어, checkpoint 마지막의 fsync 시점이나 OS가 큰 덩어리로 백그라운드 writeback을 수행할 때 발생하는 stall 가능성이 줄어든다. 그 결과 트랜잭션 latency가 크게 개선되는 경우가 많다. 다만 워크로드가 shared_buffers보다는 크고 OS page cache보다는 작은 경우 등 일부 상황에서는 오히려 성능이 나빠질 수 있고, 플랫폼에 따라 아무 효과가 없을 수도 있다.

출처: PostgreSQL 18 문서