Общие объекты и параметры для всех видов очистки
Массив статусов транзакций clog или xact
Как отмечалось ранее, снимки операций включают списки транзакций по состоянию на момент старта операции. Для оперативного составления списка и вычисления правил видимости версий записей используется отдельный массив статусов транзакций.
В разделяемой памяти сервера организована структура, называемая Commit Log или clog. Это массив, индексом которого служит номер транзакции, а элементы хранят один из четырех статусов: в процессе, зафиксирована, отменена или «порция зафиксирована» (только для подтранзакций между точками сохранения основной транзакции).
Массив фиксируется на диске во время контрольных точек и штатного закрытия сервера в поддиректории кластера баз pg_xact
.
Статусы транзакций необходимы для получения согласованного состояния данных, как в каждом из снимков, так и по всей базе. При запуске сервера они обязательно полностью считываются с диска в память до возобновления доступа.
Зафиксированные на диске данные массива защищены журналом WAL и сохраняются в резервных копиях. При физическом восстановлении сервера clog должен быть полностью восстановлен из копии и обновлен по журналам транзакций (обычно это происходит автоматически).
На диске массив статусов хранится в виде нескольких файлов фиксированного размера. Файлы автоматически добавляются при нарастании списка активных транзакций в памяти. Обслуживание заключается в периодической очистке устаревшей части информации в памяти и удалении соответствующих неактуальных файлов с диска.