Вопросы о транзакциях, ACID и согласованности данных
24 вопроса с ответами по теме «Транзакции и ACID в базах данных»
24 вопроса
Что проверяют на интервью
Как устроена подборка
Подборка о том, где начинаются и заканчиваются гарантии транзакции. Базовые свойства ACID и SQL-команды дополнены вопросами о внутреннем устройстве PostgreSQL, восстановлении после сбоев, конкурентных изменениях и взаимодействии БД с внешними системами.
При шардировании базы данных транзакции, охватывающие несколько шардов, могут быть сложными для поддержки из-за распределённости данных. Чтобы предотвратить разделение транзакций, можно использовать следующие подходы:
Принцип атомарности транзакции в базе данных означает, что транзакция рассматривается как неделимая единица работы: либо все операции внутри транзакции выполняются успешно, либо ни одна из них не применяется.
Взаимные блокировки (deadlocks) в базе данных возникают, когда две или более транзакций блокируют ресурсы, которые нужны друг другу для продолжения работы, и ни одна из них не может продолжить выполнение.
MVCC (Multi-Version Concurrency Control) в PostgreSQL — это механизм управления параллелизмом, который позволяет транзакциям видеть согласованное состояние данных без блокировок на чтение.
В PostgreSQL зависшие транзакции — это те, которые долгое время находятся в состоянии активной или idle in transaction, не завершаясь. Чтобы их определить, можно использовать запрос к системному каталогу pgstatactivity.
Параметр xmax в заголовке версии строки PostgreSQL указывает номер транзакции, которая удалила или обновила эту строку. Это используется для управления видимостью строк в MVCC (многоверсионном контроле параллелизма).
Обеспечить транзакционность при записи события одновременно в брокер сообщений (Kafka/RabbitMQ) и базу данных — нетривиальная задача, так как это две разные системы с разными транзакционными моделями.