Как устроена изоляция транзакций на основе MVCC в PostgreSQL и зачем строкам скрытые поля xmin и xmax?

MVCC хранит версии строк и определяет их видимость по snapshot и состоянию транзакций. xmin связан с созданием версии, а xmax — с её удалением, заменой или блокировочными деталями.

Короткий ответ

Что ответить на собеседовании

MVCC хранит версии строк и определяет их видимость по snapshot и состоянию транзакций. xmin связан с созданием версии, а xmax — с её удалением, заменой или блокировочными деталями.

Подробный разбор

Ответ с пояснениями

MVCC хранит версии строк и определяет их видимость по snapshot и состоянию транзакций. xmin связан с созданием версии, а xmax — с её удалением, заменой или блокировочными деталями.

UPDATE обычно создаёт новую версию вместо изменения видимой всем строки на месте. По одному xmax != 0 нельзя заключить, что запись удалена: транзакция могла не завершиться, откатиться или значение связано с блокировкой. Snapshot учитывает видимые и ещё активные транзакции. Обычные чтения часто не блокируют запись, но MVCC не отменяет write-locks и конфликты. Старые версии затем очищает VACUUM, когда они больше не нужны снимкам.

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее