База работает, но возраст XID уже может быть аварийным
База работает, но возраст XID уже может быть аварийным В журнале: WARNING: database "billing" must be vacuumed within ... transactions Это не обычное предупреждение об освобождении места. PostgreSQL использует ограниченное циклическое пространство transaction ID. Старые версии строк нужно замораживать, чтобы после оборота XID не нарушилась логика видимости. Разделяйте: dead tuples → повторное использование пространства freeze → защита от wraparound Даже статичная таблица с небольшим числом dead tuples может нуждаться в aggressive vacuum. Проверьте: — возраст datfrozenxid по базам; — таблицу или TOAST с максимальным relfrozenxid; — запускался ли anti-wraparound autovacuum; — продвинулся ли relfrozenxid; — нет ли долгих транзакций или prepared transactions; — как быстро расходуются XID; — сколько запаса осталось относительно настроек вашей версии. Anti-wraparound autovacuum запускается даже при отключённом обычном autovacuum. Отменять его из-за I/O без анализа опасно. Если предупреждение игнорировать, PostgreSQL перестанет назначать новые XID. Запись начнёт завершаться ошибками, хотя чтение ещё может работать. Типичная ошибка — начинать с VACUUM FULL, массового VACUUM FREEZE или изменения freeze-порогов без оценки состояния базы. Вывод: XID wraparound — это риск доступности записи, а не просто очередная уборка таблиц. Сохраните набор признаков, по которым риск XID wraparound нужно искать до аварийного сообщения. #УЦФОРС #PostgreSQL #DBA #АдминистрированиеБД #ЭксплуатацияБД