Выбор ответа Senior Транзакции и изоляция обновлено

Serializable и повтор транзакций

Вопрос

Команда включила уровень Serializable. Что обязательно нужно добавить в приложение?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Повтор транзакции целиком при ошибке SQLSTATE 40001. Serializable в PostgreSQL (SSI) не выстраивает транзакции в очередь, а отслеживает опасные зависимости и откатывает одну из конфликтующих с ошибкой serializationfailure.

Варианты ответа

  1. Явные LOCK TABLE перед каждым запросом транзакции
  2. Повтор транзакции целиком при ошибке SQLSTATE 40001правильный ответ
  3. Ничего: Serializable сам выполняет транзакции по очереди
  4. Индексы на все колонки в WHERE, иначе уровень не работает

Разбор

Serializable в PostgreSQL (SSI) не выстраивает транзакции в очередь, а отслеживает опасные зависимости и откатывает одну из конфликтующих с ошибкой serialization_failure. Приложение должно повторить такую транзакцию с начала. Явные блокировки таблиц убивают параллелизм и не нужны. Индексы уменьшают число ложных конфликтов (блокировки предикатов становятся точнее), но без них уровень работает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме