Можно сделать outbox append-only и хранить прогресс relay отдельно, но это меняет модель обработки, а не устраняет все затраты. DELETE тоже создаёт MVCC-мусор; иногда удобнее очистка партициями.
Можно ли переделать outbox так, чтобы избежать UPDATE и связанного с ним MVCC bloat?
Можно сделать outbox append-only и хранить прогресс relay отдельно, но это меняет модель обработки, а не устраняет все затраты. DELETE тоже создаёт MVCC-мусор; иногда удобнее очистка партициями.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Можно сделать outbox append-only и хранить прогресс relay отдельно, но это меняет модель обработки, а не устраняет все затраты. DELETE тоже создаёт MVCC-мусор; иногда удобнее очистка партициями.
Главная опасность — курсор по возрастающему id может пропустить поздно закоммиченную транзакцию с меньшим id. Нужен алгоритм, учитывающий порядок commit, либо CDC, а не простое «прочитал max(id), двигаюсь дальше». Также сохраняются повторы после сбоя между отправкой и фиксацией прогресса. Для небольшого потока UPDATE статуса и настроенный autovacuum могут быть безопаснее сложной схемы; выбирайте по измеренной проблеме.