PostgreSQL использует циклическое пространство обычных transaction ID. Старые версии строк нужно замораживать, иначе сравнение видимости станет небезопасным; anti-wraparound VACUUM предотвращает это.
Что такое проблема переполнения идентификаторов транзакций (Transaction ID Wraparound) в PostgreSQL, почему она критична для больших баз данных и какую роль в её предотвращении играет процесс VACUUM?
PostgreSQL использует циклическое пространство обычных transaction ID. Старые версии строк нужно замораживать, иначе сравнение видимости станет небезопасным; anti-wraparound VACUUM предотвращает это.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
PostgreSQL использует циклическое пространство обычных transaction ID. Старые версии строк нужно замораживать, иначе сравнение видимости станет небезопасным; anti-wraparound VACUUM предотвращает это.
Опасность зависит от числа транзакций и возраста XID, а не только размера БД. Freeze помечает достаточно старые версии как видимые независимо от дальнейшего оборота счётчика. Нужны работающий autovacuum и мониторинг возраста XID таблиц и баз. Долгие транзакции и удерживаемые горизонты мешают очистке. При опасном приближении PostgreSQL ограничивает операции, чтобы защитить данные. Это не задача для ручного сброса идентификаторов.
Источник: www.postgresql.org.