Назад к вопросам
Senior
3
Что такое MVCC в PostgreSQL? Как именно он создаёт версии строк?
Компании, где спрашивали
Магнум
Ответ от нейросети
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 и последующие транзакции — новую.
Это позволяет эффективно реализовать уровни изоляции и поддерживать высокую производительность при параллельной работе.