PostgreSQL

Checkpoint frequency exceeds sustainable rate

warning
performanceUpdated Mar 23, 2026

Frequent checkpoints cause I/O spikes and performance hiccups. When requested checkpoints (checkpoint_req) significantly exceed timed checkpoints (checkpoint_timed), it indicates max_wal_size is too low or write workload is too high.

Technologies:
How to detect:

checkpointer_num_requested > checkpointer_num_timed over 1 hour window, or checkpoint interval < 5 minutes sustained.

Recommended action:

Set checkpoint_completion_target=0.9 to spread checkpoint I/O over 90% of checkpoint interval. Increase max_wal_size (e.g., from 1GB to 4GB for OLTP, 16GB for OLAP). Monitor checkpoint frequency via pg_stat_bgwriter. Enable log_checkpoints to detect frequent checkpoints. Review checkpoint_write_time and checkpoint_sync_time to identify I/O bottlenecks. Tune bgwriter_delay and bgwriter_lru_maxpages to spread writes.