Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Postgres: concurrency, mvcc, isolation

Что такое MVCC (Multiversion Concurrency Control)? Где используется?

Вопрос проверяет понимание современного и эффективного механизма управления параллельным доступом к данным, лежащего в основе многих популярных СУБД.

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

MVCC (Multiversion Concurrency Control, Многовариантное управление параллелизмом) — это механизм, который позволяет повысить производительность базы данных за счет хранения нескольких версий одного объекта данных. Это позволяет операциям чтения получать согласованный снимок данных без блокировок, ожидая завершения операций записи, и наоборот. Он широко используется в современных реляционных (PostgreSQL, MySQL InnoDB) и нереляционных СУБД.

Длинный ответ

MVCC — это альтернатива подходу с блокировками читателей-писателей для реализации уровней изоляции транзакций.

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

  1. Множественные версии: Когда строка в таблице обновляется, СУБД не перезаписывает старые данные сразу. Вместо этого она создает новую версию этой строки. Старая версия сохраняется в специальной области хранилища.

  2. Временные метки или номера транзакций: Каждой транзакции и каждой версии строки присваивается уникальный идентификатор (например, номер транзакции или временная метка).

  3. Снимок данных (Snapshot): Когда транзакция начинает работу, она "видит" снимок базы данных на момент своего начала. Этот снимок состоит только из тех версий каждой строки, которые были зафиксированы к моменту начала транзакции и не были удалены к этому времени.

  4. Чтение без блокировок: Операция SELECT не требует установки блокировок на данные. Она просто выбирает соответствующую версию строки из снимка. Это позволяет читателям не блокировать писателей, а писателям — не блокировать читателей.

  5. Сборка мусора: Старые версии строк, которые больше не нужны ни одной из активных транзакций, удаляются фоновым процессом (vacuum в PostgreSQL, purge в InnoDB).

Преимущества MVCC:

  • Высокая производительность чтения: Операции чтения практически не блокируются.

  • Высокий параллелизм: Множество транзакций могут читать и писать данные одновременно без явных конфликтов.

Где используется?

  • PostgreSQL: Полностью построен на MVCC.

  • MySQL (движок InnoDB): Использует MVCC.

  • Oracle Database: Использует MVCC.

  • SQL Server: Использует MVCC для уровней изоляции, основанных на снимках данных (snapshot isolation).

  • Нереляционные СУБД: Например, MongoDB также использует концепцию MVCC.

Вывод: MVCC — это мощный механизм, который лежит в основе большинства современных СУБД. Он обеспечивает высокий уровень параллелизма за счет хранения нескольких версий данных, позволяя операциям чтения работать с непротиворечивым снимком информации без блокировок.

Уровень

  • Рейтинг:

    2

  • Сложность:

    10

Навыки

  • Postgres

    Postgres

  • MongoDB

    MongoDB

Ключевые слова

#concurrency

#mvcc

#isolation

Подпишись на Python Developer в телеграм