> Что такое MVCC в PostgreSQL (Go)
Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Ozon
Стек: Go, PostgreSQL
> Пример ответа
MVCC (Multiversion Concurrency Control) - это механизм управления конкурентным доступом к данным, основанный на создании нескольких версий строк. В PostgreSQL каждая транзакция видит "снимок" данных на момент своего начала, что позволяет избежать блокировок при чтении и обеспечивает изоляцию по стандарту ACID (уровни Read Committed и Serializable).
В PostgreSQL MVCC реализован через системные поля xmin и xmax в каждой строке. xmin хранит идентификатор транзакции, создавшей версию строки, а xmax - транзакции, удалившей или изменившей её. При чтении PostgreSQL проверяет видимость версии: если xmin завершена и не отменена, а xmax неактивна или равна текущей транзакции, строка считается видимой. Это позволяет читателям не ждать писателей, а писателям - не блокировать читателей.
Пример в Go с использованием database/sql:
GO// Транзакция A: чтение без блокировкиtxA, _ := db.Begin()row := txA.QueryRow("SELECT balance FROM accounts WHERE id = 1")var balance introw.Scan(&balance) // видит версию на момент начала txA// Транзакция B: обновлениеtxB, _ := db.Begin()txB.Exec("UPDATE accounts SET balance = balance + 100 WHERE id = 1")txB.Commit() // создаётся новая версия строки// Транзакция A: повторное чтение - видит старую версию (если уровень Repeatable Read)row = txA.QueryRow("SELECT balance FROM accounts WHERE id = 1")row.Scan(&balance) // баланс не изменилсяtxA.Commit()
Недостаток MVCC - накопление "мёртвых" версий строк, которые удаляются фоновым процессом autovacuum. В Go-приложениях важно следить за параметрами vacuum и настраивать idle_in_transaction_session_timeout, чтобы избежать раздувания таблиц.
> Похожие задачи по Go
Что такое лимиты и запросы ресурсов в Kubernetes
Что такое b-tree индекс и что означает буква B
Как устроен оркестратор, управляющий задачами для платежей
Зачем нужен отдельный сервис на Go для оркестратора
> Похожие задачи по backend
Что такое лимиты и запросы ресурсов в Kubernetes
Что такое b-tree индекс и что означает буква B
Как устроен оркестратор, управляющий задачами для платежей
Зачем нужен отдельный сервис на Go для оркестратора
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью