Вспомогательный процесс аналогичный Checkpointer
-
Работает постоянно в фоне, каждые
bgwriter_delay(по умолчанию — 200 мс). -
Просматривает список грязных страниц в
shared_buffers. -
Выбирает некоторые из них (по алгоритму LRU и количеству модификаций) и сбрасывает на диск.
-
Не делает
fsyncпо умолчанию — толькоwrite()→ данные попадают в кэш ОС. -
Не гарантирует, что страница будет на диске — только уменьшает объём работы для Checkpointer.
-
Если Background Writer отключён (
bgwriter_lru_maxpages = 0) — вся нагрузка ложится на Checkpointer, что может вызвать I/O spikes.
Краткое сравнение с Checkpointer
| Характеристика | Background Writer | Checkpointer |
|---|---|---|
| Цель | Уменьшить нагрузку на Checkpointer и backend’ы, сгладить I/O | Гарантировать, что все грязные страницы сброшены к моменту checkpoint’а |
| Когда работает | Постоянно, небольшими порциями | Периодически — во время checkpoint’а (каждые 5 мин или при переполнении WAL) |
| Что сбрасывает | Часть грязных страниц (эвристически) | Все грязные страницы, существовавшие на момент начала checkpoint’а |
| Пишет CHECKPOINT в WAL? | ❌ Нет | ✅ Да |
| Разрешает удалять старые WAL? | ❌ Нет | ✅ Да |
| Процесс в системе | postgres: background writer | postgres: checkpointer |
Мониторинг
SELECT * FROM pg_stat_bgwriter;Вы увидите:
buffers_clean— сколько страниц сбросил Background Writer,buffers_backend— сколько страниц сбросили backend’ы сами (когда не хватило буферов),buffers_checkpoint— сколько страниц сброшено во время checkpoint’а (в основном — Checkpointerом).
Идеально, если
buffers_cleanвысокий, аbuffers_backend— низкий.