ACID

  • Atomicity (атомарность)
  • Consistency (согласованность)
  • Isolation (изоляция)
  • Durability (долговечность) Транзакция Программисты ответственны за начало и завершение транзакций, которые осуществляют логическую целостность данных (согласованность) За управлением транзакциями в MS SQL Server отвечает компонент Database Engine. Обеспечивает следующее:
  • Блокирующие средства, которые обеспечивают изоляцию транзакций
  • Регистрирующие средства, гарантирующие длительность транзакций. В случае сбой, движок посмотрит в журнал и откатит все незавершенные в момент сбоя транзакции
  • Предоставляет функции управления транзакциями для разработчиков Для явного начала транзакции есть инструкции
BEGIN TRANSACTION;

Для завершения транзакции и фиксации изменений используется инструкция

COMMIT TRANSACTION;

При возникновении ошибки (и если она не обработана), транзакция откатывается.

Транзакцию можно откатить явно инструкцией

ROLLBACK TRANSACTION;

После коммита, ресурсы, заблокированные транзакцией высвобождаются

В неявном режиме все операции должны происходить в рамках явно заданных транзакций

Точки сохранения

Аномалии

Аномалия одновременного выполнения

Стандарт SQL описывает 4 вида аномалий

  • Потерянное обновление (lost update)

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

  • Грязное чтение (dirty read) и Read Uncommitted

Аномалия грязного чтения (dirty read) возникает, когда транзакция читает еще не зафиксированные изменения, сделанные другой транзакцией.

  • Неповторяющееся чтение (non-repeatable read) и Read Committed

Аномалия неповторяющегося чтения (non-repeatable read) возникает, когда транзакция читает одну и ту же строку два раза, а в промежутке между чтениями вторая транзакция изменяет (или удаляет) эту строку и фиксирует изменения. Тогда первая транзакция получит разные результаты.

  • Фантомное чтение и Repeatable Read

Аномалия фантомного чтения (phantom read) возникает, когда одна транзакция два раза читает набор строк по одинаковому условию, а в промежутке между чтениями другая транзакция добавляет строки, удовлетворяющие этому условию, и фиксирует изменения. Тогда первая транзакция получит разные наборы строк

Есть 2 способа управления параллелизмом:

  • Пессимистическое
  • Оптимистическое

Пессимистическое управление параллелизмом

Оптимистическое управление параллелизмом