Расскажите про MVCC (Multi-Version Concurrency Control) в PostgreSQL.
Ответ от нейросети
sobes.tech AI
MVCC (Multi-Version Concurrency Control) в PostgreSQL — это механизм управления параллелизмом, который позволяет нескольким транзакциям одновременно читать и писать данные без блокировок на чтение.
Основная идея MVCC — хранить несколько версий одной и той же строки в таблице. Каждая версия имеет метки транзакций (xmin, xmax), которые определяют, в каких транзакциях эта версия видима.
Когда транзакция читает данные, она видит только те версии строк, которые были актуальны на момент начала её работы, игнорируя изменения, сделанные параллельными незавершёнными транзакциями. Это обеспечивает изоляцию чтения и предотвращает блокировки.
При обновлении строки PostgreSQL не перезаписывает её напрямую, а создаёт новую версию с новым xmin, а старая версия получает xmax, указывающий, что она больше не актуальна для новых транзакций.
Пример:
BEGIN;
SELECT * FROM users WHERE id = 1; -- видит версию строки, актуальную на момент начала транзакции
UPDATE users SET name = 'NewName' WHERE id = 1; -- создаётся новая версия строки
COMMIT;
Таким образом, MVCC повышает производительность и параллелизм, снижая количество блокировок и конфликтов между транзакциями.