Middle
72
questionbank

Какие существуют типы изоляции транзакций?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Изоляция транзакций определяет, насколько одна транзакция может видеть промежуточные изменения других параллельно выполняющихся транзакций.

Стандарт SQL определяет четыре уровня изоляции:

  1. Read Uncommitted (Чтение незафиксированных данных): Самый низкий уровень. Транзакция может читать незафиксированные изменения других транзакций (до "грязного" чтения).
  2. Read Committed (Чтение зафиксированных данных): Транзакция может читать только данные, которые были зафиксированы другими транзакциями. Избегает "грязного" чтения.
  3. Repeatable Read (Повторяемость чтения): Транзакция гарантирует, что данные, прочитанные в течение транзакции, не изменятся другими транзакциями при повторном чтении. Избегает "грязного" чтения и "неповторяющегося" чтения. Возможны "фантомы".
  4. Serializable (Сериализуемый): Самый высокий уровень изоляции. Гарантирует, что параллельные транзакции выполняются так, будто они выполнялись последовательно. Избегает всех типов нежелательных явлений: "грязного" чтения, "неповторяющегося" чтения и "фантомов".

Нежелательные явления при параллельном выполнении транзакций:

  • Dirty Read (Грязное чтение): Транзакция A читает данные, модифицированные Транзакцией B, которые еще не зафиксированы. Если Транзакция B откатит изменения, то Транзакция A будет работать с неверными данными.
  • Non-repeatable Read (Неповторяющееся чтение): Транзакция A читает одни и те же данные дважды, но между чтениями Транзакция B фиксирует изменение этих данных. В результате Транзакция A получает разные значения при повторных чтениях.
  • Phantom Read (Чтение фантомов): Транзакция A выполняет запрос, возвращающий набор строк. Транзакция B фиксирует вставку или удаление строк, которые соответствуют критериям запроса А. При повторном выполнении того же запроса Транзакция A получает другой набор строк.

Сводная таблица нежелательных явлений по уровням изоляции:

Уровень изоляцииГрязное чтениеНеповторяющееся чтениеФантомы
Read UncommittedДаДаДа
Read CommittedНетДаДа
Repeatable ReadНетНетДа
SerializableНетНетНет

Выбор уровня изоляции влияет на производительность и корректность работы приложения. Чем выше уровень изоляции, тем выше накладные расходы.