Sobes.tech
Back to questions
Senior
2

Что такое MVCC в PostgreSQL? Как именно он создаёт версии строк?

Companies where asked
Магнум

Answer from AI

sobes.tech AI

MVCC (Multi-Version Concurrency Control) в PostgreSQL — это механизм управления конкурентным доступом к данным без блокировок на чтение.

Как работает MVCC:

  • Каждая строка в таблице хранит две системные метки: xmin (ID транзакции, которая создала или изменила строку) и xmax (ID транзакции, которая удалила строку).
  • При обновлении строки фактически создаётся новая версия строки с новым xmin, а старая версия получает xmax, указывающий, что она устарела.
  • При чтении транзакция видит только те версии строк, которые были «активны» на момент начала её работы, игнорируя строки с xmin или xmax, выходящими за её видимость.

Таким образом, PostgreSQL хранит несколько версий одной и той же строки, обеспечивая изоляцию транзакций и позволяя читать данные без блокировок.

Пример:

  • Транзакция T1 читает строку с xmin=100, xmax=0.
  • Транзакция T2 обновляет эту строку, создавая новую версию с xmin=101, а у старой версии ставит xmax=101.
  • T1 продолжает видеть старую версию, T2 и последующие транзакции — новую.

Это позволяет эффективно реализовать уровни изоляции и поддерживать высокую производительность при параллельной работе.