Сбрасывание грязных страниц PostgerSQL
В дополнение к замещению страниц предусмотрены процессы checkpointer и background writer. Оба процесса выполняют одну и ту же функцию - сбрасывают грязные страницы в хранилища, однако у них совершенно разные роли и принцип действия.
Процесс checkpointer записывает запись о контрольной точке в файл WAL и сбрасывает грязные страницы каждый раз, когда запускается контрольная точка. В разделе 9.7 описывается процесс начала контрольной точки.
Роль процесса background writer заключается в том, чтобы уменьшить влияние интенсивной записи контрольных точек. Данный процесс сбрасывает грязные страницы постепенно, с минимальным влиянием на активность базы данных. По умолчанию background writer “просыпается” каждые 200 мс (определяется bgwriter_delay) и обрабатывает bgwriter_lru_maxpages (по умолчанию 100 страниц).
Примечание: Почему эти процессы были разделены?
В версии 9.1 и более ранних версия background writer выполнял обработку контрольных точек yf регулярной основе.
В версии 9.2 процесс checkpointer был отделен от процесса background writer. Причина подробно описывается в статье “Separating bgwriter and checkpointer”, здесь мы приводим лишь одну цитату:
В настоящее время (в 2011 году) процесс bgwriter выполняет фоновую запись, создание контрольных точек и некоторые другие функции. Это означает, что мы не можем выполнить финальный fsync контрольной точки без остановки фоновой записи, поэтому выполнение обеих задач в одном процессе негативно влияет на производительность в целом.



