🛠️ Storage latency растёт рывками? Проверьте checkpoints PostgreSQL
Для PostgreSQL 18:
SELECT
num_timed,
num_requested,
num_done,
write_time,
sync_time,
buffers_written,
stats_reset
FROM pg_stat_checkpointer;
Важный нюанс PG18:
num_timed и num_requested могут учитывать как выполненные, так и пропущенные checkpoints.
Поэтому смотрите и num_done — число реально выполненных.
И обязательно учитывайте stats_reset.
Дальше:
SHOW checkpoint_timeout;
SHOW max_wal_size;
SHOW checkpoint_completion_target;
checkpoint_timeout не означает «checkpoint строго раз в N минут».
При интенсивной генерации WAL checkpoint может потребоваться раньше, а max_wal_size — soft limit.
Проверьте и WAL:
SELECT wal_bytes, stats_reset
FROM pg_stat_wal;
Если WAL generation вырос, checkpoint profile тоже может измениться.
checkpoint_completion_target распределяет checkpoint I/O по времени.
Уменьшать его ради «быстрого checkpoint» обычно плохая идея: I/O становится более концентрированным.
Также смотрите:
— buffers_written;
— write_time;
— sync_time;
— checkpoint_warning;
— batch/write-heavy workload.
И не используйте CHECKPOINT как регулярное production-лечение.
Диагностика:
I/O spikes
→ checkpointer stats
→ timed/requested/done
→ WAL generation
→ settings
→ logs
→ workload
Сохраните набор метрик, который стоит проверить до изменения настроек checkpoint и WAL.
🔹🔹🔹🔹
Для PostgreSQL 18:
SELECT
num_timed,
num_requested,
num_done,
write_time,
sync_time,
buffers_written,
stats_reset
FROM pg_stat_checkpointer;
Важный нюанс PG18:
num_timed и num_requested могут учитывать как выполненные, так и пропущенные checkpoints.
Поэтому смотрите и num_done — число реально выполненных.
И обязательно учитывайте stats_reset.
Дальше:
SHOW checkpoint_timeout;
SHOW max_wal_size;
SHOW checkpoint_completion_target;
checkpoint_timeout не означает «checkpoint строго раз в N минут».
При интенсивной генерации WAL checkpoint может потребоваться раньше, а max_wal_size — soft limit.
Проверьте и WAL:
SELECT wal_bytes, stats_reset
FROM pg_stat_wal;
Если WAL generation вырос, checkpoint profile тоже может измениться.
checkpoint_completion_target распределяет checkpoint I/O по времени.
Уменьшать его ради «быстрого checkpoint» обычно плохая идея: I/O становится более концентрированным.
Также смотрите:
— buffers_written;
— write_time;
— sync_time;
— checkpoint_warning;
— batch/write-heavy workload.
И не используйте CHECKPOINT как регулярное production-лечение.
Диагностика:
I/O spikes
→ checkpointer stats
→ timed/requested/done
→ WAL generation
→ settings
→ logs
→ workload
Сохраните набор метрик, который стоит проверить до изменения настроек checkpoint и WAL.
🔹🔹🔹🔹