MVCC хранит версии строк и определяет их видимость по snapshot и состоянию транзакций. xmin связан с созданием версии, а xmax — с её удалением, заменой или блокировочными деталями.
Как устроена изоляция транзакций на основе MVCC в PostgreSQL и зачем строкам скрытые поля xmin и xmax?
MVCC хранит версии строк и определяет их видимость по snapshot и состоянию транзакций. xmin связан с созданием версии, а xmax — с её удалением, заменой или блокировочными деталями.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
MVCC хранит версии строк и определяет их видимость по snapshot и состоянию транзакций. xmin связан с созданием версии, а xmax — с её удалением, заменой или блокировочными деталями.
UPDATE обычно создаёт новую версию вместо изменения видимой всем строки на месте. По одному xmax != 0 нельзя заключить, что запись удалена: транзакция могла не завершиться, откатиться или значение связано с блокировкой. Snapshot учитывает видимые и ещё активные транзакции. Обычные чтения часто не блокируют запись, но MVCC не отменяет write-locks и конфликты. Старые версии затем очищает VACUUM, когда они больше не нужны снимкам.
Источник: www.postgresql.org.