checkpoint_flush_after
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 256kB on Linux | sighup | integer |
| 15 | 256kB on Linux | sighup | integer |
| 16 | 256kB on Linux | sighup | integer |
| 17 | 256kB on Linux | sighup | integer |
| 18 | 256kB on Linux | sighup | integer |
| 19 | 256kB on Linux | sighup | integer |
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 문서