MVCC расшифровывается как Multiversion Concurrency Control — многоверсионное управление конкурентным доступом.
PostgreSQL может одновременно хранить несколько версий одной логической строки. При изменении данных старая версия не удаляется немедленно: создаётся новая версия, а предыдущая некоторое время сохраняется для транзакций, которые ещё могут её видеть.
Каждый SQL-запрос работает со снимком данных — snapshot. Поэтому он видит согласованное состояние базы, соответствующее правилам текущего уровня изоляции, а не случайную смесь изменений разных транзакций.
Основное преимущество MVCC заключается в том, что обычное чтение не конфликтует с обычной записью:
- SELECT может читать старую видимую версию строки;
- UPDATE создаёт новую версию;
- незавершённые изменения другой транзакции не становятся видимыми раньше времени.
Таким образом PostgreSQL уменьшает количество конфликтующих блокировок между читателями и писателями. При этом конкурирующие изменения одной и той же строки по-прежнему могут блокировать друг друга.