6
Синхронная
если смещения не хватает и необходимо увеличить базовое значение
При очистке
уменьшает pg_xact и pg_multixact
vacuum_freeze_min_age = 50 млн
vacuum_freeze_table_age = 150 млн
autovacuum_freeze_max_age = 10 млрд
vacuum_failsafe_age = 1.6 млрд
vacuum_multixact_freeze_min_age = 5 млн
vacuum_multixact_freeze_table_age = 150 млн
autovacuum_multixact_freeze_max_age = 20 млрд
vacuum_multixact_failsafe_age = 1.6 млрд
Заморозка
Поскольку смещения в заголовке версии строки 32-битные, диапазон
значений xid в пределах страницы — от базового до базового плюс
2
32
−1. Если в какую-либо версию строки на странице нужно записать
больший номер, сервер увеличивает базовое значение xid. Если при
этом версии строк с небольшими номерами xid препятствуют такому
увеличению, сервер замораживает эти версии «на лету».
Поскольку 64-битные номера транзакций не используются повторно,
своевременная заморозка не критична для работы многоверсионности:
параметр autovacuum_freeze_max_age имеет значение по умолчанию
10 млрд вместо 200 млн в обычном PostgreSQL, и значение
autovacuum_multixact_freeze_max_age также увеличено. Однако
заморозка все же выполняется как часть процедуры очистки, чтобы
уменьшать размер CLOG (подкаталога pg_xact) и статусов
мультитранзакций (pg_multixact).
Ограничением этого решения является то, что очень долгие транзакции
(возраст которой превышает 2
32
), удерживающие снимок, будут мешать
замораживать версии строк. Поэтому, хотя необходимость в регулярной
заморозке отпадает, долгих транзакций по-прежнему стоит избегать.
В PostgresPro Enterprise 17 появилась фоновая заморозка:
дополнительный процесс выполняет очистку и заморозку недавно
измененных страниц. Ее рекомендуется включать, если автоочистка не
справляется со своими задачами.