Вспомогательный процесс аналогичный Checkpointer

  • Работает постоянно в фоне, каждые bgwriter_delay (по умолчанию — 200 мс).

  • Просматривает список грязных страниц в shared_buffers.

  • Выбирает некоторые из них (по алгоритму LRU и количеству модификаций) и сбрасывает на диск.

  • Не делает fsync по умолчанию — только write() → данные попадают в кэш ОС.

  • Не гарантирует, что страница будет на диске — только уменьшает объём работы для Checkpointer.

  • Если Background Writer отключён (bgwriter_lru_maxpages = 0) — вся нагрузка ложится на Checkpointer, что может вызвать I/O spikes.

Краткое сравнение с Checkpointer

ХарактеристикаBackground WriterCheckpointer
ЦельУменьшить нагрузку на Checkpointer и backend’ы, сгладить I/OГарантировать, что все грязные страницы сброшены к моменту checkpoint’а
Когда работаетПостоянно, небольшими порциямиПериодически — во время checkpoint’а (каждые 5 мин или при переполнении WAL)
Что сбрасываетЧасть грязных страниц (эвристически)Все грязные страницы, существовавшие на момент начала checkpoint’а
Пишет CHECKPOINT в WAL?❌ Нет✅ Да
Разрешает удалять старые WAL?❌ Нет✅ Да
Процесс в системеpostgres: background writerpostgres: checkpointer

Мониторинг

SELECT * FROM pg_stat_bgwriter;

Вы увидите:

  • buffers_clean — сколько страниц сбросил Background Writer,
  • buffers_backend — сколько страниц сбросили backend’ы сами (когда не хватило буферов),
  • buffers_checkpoint — сколько страниц сброшено во время checkpoint’а (в основном — Checkpointerом).

Идеально, если buffers_clean высокий, а buffers_backend — низкий.