bgwriter_flush_after
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 512kB on Linux | sighup | integer |
| 15 | 512kB on Linux | sighup | integer |
| 16 | 512kB on Linux | sighup | integer |
| 17 | 512kB on Linux | sighup | integer |
| 18 | 512kB on Linux | sighup | integer |
| 19 | 512kB on Linux | sighup | integer |
background writer가 이 양보다 많은 데이터를 쓰면 OS가 해당 쓰기를 storage로 내려보내도록 강제한다. 단위 없이 값을 주면 블록(BLCKSZ, 보통 8kB) 단위로 해석하며, 허용 범위는 0(강제 writeback 비활성)부터 2MB까지다. 기본값은 Linux에서 512kB, 그 외 플랫폼에서는 0이다.
이렇게 하면 kernel의 page cache에 쌓이는 dirty data 양이 제한된다. checkpoint 마지막의 fsync 시점이나 OS가 큰 배치로 데이터를 되쓰는 시점에 생기는 stall 가능성이 줄어, 트랜잭션 지연이 크게 개선되는 경우가 많다. 반대로 workload가 shared_buffers보다는 크고 OS의 page cache보다는 작은 경우에는 성능이 나빠질 수 있으며, 일부 플랫폼에서는 효과가 없다. background writer가 미리 써내는 dirty buffer가 kernel에 계속 쌓이기만 하면 checkpoint 때 몰아서 flush되는 문제가 되살아나므로, 이 파라미터는 background writer의 쓰기를 잘게 나눠 storage로 흘려보내는 역할을 한다.
postgresql.conf나 서버 커맨드라인에서만 설정할 수 있다.
출처: PostgreSQL 18 문서