Уровни изоляции транзакций
Проблемы с параллельным доступом к данным
- Потерянное обновление (lost update) - при одновременном изменении одного блока данных разными транзакциями теряются все изменения, кроме последнего;
- “Грязное” чтение (dirty read) - чтение данных, добавленных или измененных транзакцией, которая впоследствии откатится;
- Неповторяющееся чтение (non-repeatable read) - при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются измененными;
- Фантомное чтение (phantom reads) - одна транзакция в ходе своего выполнения несколько раз выбирает множество строк по одним и тем же критериям. Другая транзакция в интервалах между этими выборками добавляет или удаляет строки или изменяет столбцы некоторых строк, используемых в критериях выборки первой транзакции, и успешно заканчивается. В результате получится, что одни и те же выборки в первой транзакции дают разные множества строк.
Уровни изоляции транзакций
Read uncommitted (чтение незафиксированных данных)
Гарантирует только отсутствие потерянных обновлений. Способ реализации - блокировка данных на время команды изменения (команды изменения одних и тех же строк фактически выполняются последовательно).
Read committed (чтение фиксированных данных)
Гарантирует отсутствие потерянных обновлений и грязного чтения.
Способы реализации - блокировка или версионность.
Repeatable read (повторяемость чтения)
Гарантирует отсутствие потерянных обновлений, грязного чтения и неповторяющееся чтение. Способ реализации - блокировка.
Serializable (упорядочиваемость)
Самый высокий уровень изолированности; транзакции полностью изолируются друг от друга, каждая выполняется последовательно, как будто параллельных транзакций не существует. Только на этом уровне параллельные транзакции не подвержены эффекту «фантомного чтения».
Посмотреть другие статьи