Контрольные точки в PostgreSQL — это позиции в журнале транзакций, которые сообщают, что все изменения данных, зафиксированные в журнале, успешно синхронизированы с данными на диске. prohoster.info
Процесс работы механизма контрольных точек включает несколько этапов: habr.com
- Сброс на диск буферов статуса транзакций (XACT). habr.com Поскольку их немного (всего 128), они записываются сразу же. habr.com
- Запись грязных страниц из буферного кеша. habr.com Сбросить все страницы одномоментно невозможно, поскольку размер буферного кеша может быть значительным. habr.com Поэтому все грязные на текущий момент страницы помечаются в буферном кеше в заголовках специальным флагом. habr.com
- Процесс контрольной точки постепенно проходит по всем буферам и сбрасывает помеченные на диск. habr.com Страницы не вытесняются из кеша, а только записываются на диск. habr.com
- В конце работы процесс создаёт журнальную запись об окончании контрольной точки. habr.com В этой записи содержится LSN момента начала работы контрольной точки. habr.com
- В файле $PGDATA/global/pgcontrol обновляется указание на последнюю пройденную контрольную точку. habr.com До того, как контрольная точка завершится, pgcontrol указывает на предыдущую контрольную точку. habr.com
Большая часть контрольных точек происходит по расписанию: раз в checkpointtimeout единиц времени. habr.com Но при повышенной нагрузке контрольная точка вызывается чаще, при достижении объёма maxwal_size. habr.com
Также возможен принудительный запуск контрольной точки с помощью SQL команды CHECKPOINT. pgdocs.ru