14
Восстановление
Алгоритм (упрощенный)
при старте сервера после сбоя
(состояние кластера в pg_control отличается от «shut down»):
1. для каждой журнальной записи:
1.1. определить страницу, к которой относится эта запись
1.2. применить запись, если ее LSN больше, чем LSN страницы
2. перезаписать нежурналируемые таблицы init-файлами
Если в работе сервера произошел сбой, то при последующем запуске
процесс startup (запускаемый postmaster-ом в самом начале работы)
обнаружит это, посмотрев в файл pg_control и увидев статус, отличный
от «shut down». Тогда автоматически будет выполнено восстановление.
Процесс startup будет последовательно читать журнал и применять
записи к страницам, если в этом есть необходимость (что можно
проверить, сравнив LSN страницы на диске с LSN журнальной записи).
Изменение страниц происходит в буферном кеше, как при обычной
работе — для этого postmaster запускает необходимые фоновые
процессы.
Аналогично записи применяются и к файлам: например, если запись
говорит о том, что файл должен существовать, а его нет — файл
создается.
В конце процесса все нежурналируемые таблицы перезаписываются
с помощью образов в init-файлах.
Приведенный алгоритм является упрощенным. В частности, ничего не
говорится о том, с какого места надо начинать чтение журнальных
записей (это будет рассмотрено в теме «Контрольная точка»).