Ответ вслух Middle Транзакции и изоляция спрашивают часто обновлено

Уровни изоляции

Вопрос

Расскажи про уровни изоляции транзакций: какие аномалии они предотвращают и как это устроено в PostgreSQL.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Уровни изоляции описывают, какие эффекты параллельных транзакций допустимы. Аномалии: грязное чтение, когда видим чужие незакоммиченные данные; неповторяющееся чтение, когда строка изменилась между двумя нашими чтениями; фантомы, когда по тому же условию появились новые строки.

Что должно прозвучать в ответе

  • Аномалии: dirty read, non-repeatable read, phantom read, плюс lost update и write skew

  • Четыре уровня стандарта и что каждый запрещает

  • В PostgreSQL по умолчанию Read Committed, грязного чтения нет вообще

  • Repeatable Read = снимок на всю транзакцию, фантомов тоже нет, при конфликте записи ошибка

  • Serializable (SSI) ловит write skew, приложение обязано повторять транзакцию

  • Чем выше уровень, тем больше откатов и повторов

Что могут спросить следом

  • Какой уровень выберешь для перевода денег между счетами?
  • Чем отличается Repeatable Read в MySQL и PostgreSQL?
  • Как защититься от lost update без смены уровня?

Разбор

Уровни изоляции описывают, какие эффекты параллельных транзакций допустимы. Аномалии: грязное чтение, когда видим чужие незакоммиченные данные; неповторяющееся чтение, когда строка изменилась между двумя нашими чтениями; фантомы, когда по тому же условию появились новые строки. Ещё важны lost update и write skew. Стандарт даёт четыре уровня от Read Uncommitted до Serializable, каждый запрещает больше. В PostgreSQL всё на MVCC. По умолчанию Read Committed: каждый оператор видит свежий снимок. Грязного чтения нет даже на Read Uncommitted. Repeatable Read берёт один снимок на всю транзакцию, поэтому и фантомов нет, а при попытке изменить строку, которую кто-то изменил после снимка, получаем ошибку и повторяем. Serializable дополнительно отслеживает зависимости и ловит write skew. Цена высоких уровней: больше откатов, приложение обязано уметь повторять транзакцию.

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

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

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