- Грязное чтение: НЕОБХОДИМО чтение данных из другой транзакции.
- Неповторяющиеся чтения: чтение COMMITTED данных из
UPDATE
запроса из другой транзакции.
- Фантомное чтение: чтение ЗАВЕРШЕННЫХ данных из
INSERT
или DELETE
запроса из другой транзакции.
Примечание: инструкции DELETE из другой транзакции также имеют очень низкую вероятность в некоторых случаях вызывать неповторяющиеся чтения. Это происходит, когда оператор DELETE, к сожалению, удаляет ту же самую строку, которую запрашивала ваша текущая транзакция. Но это редкий случай, и он гораздо менее вероятен в базе данных, в каждой таблице которой есть миллионы строк. Таблицы, содержащие данные транзакций, обычно имеют большой объем данных в любой производственной среде.
Также мы можем заметить, что ОБНОВЛЕНИЯ могут быть более частой задачей в большинстве случаев использования, чем фактические INSERT или DELETES (в таких случаях опасность неповторяющихся чтений остается только - фантомные чтения em> в таких случаях невозможны). Вот почему ОБНОВЛЕНИЯ обрабатываются иначе, чем INSERT-DELETE, и возникающая в результате аномалия также называется по-другому.
Также существует дополнительная стоимость обработки, связанная с обработкой INSERT-DELETE, а не просто с обработкой UPDATES.
- READ_UNCOMMITTED ничего не мешает. Это нулевой уровень изоляции
- READ_COMMITTED предотвращает только одно, т.е. грязное чтение
- REPEATABLE_READ предотвращает две аномалии: грязное чтение и неповторяющееся чтение.
- SERIALIZABLE предотвращает все три аномалии: грязное чтение, неповторяющееся чтение и фантомное чтение.
Тогда почему бы просто не установить транзакцию SERIALIZABLE всегда? Что ж, ответ на вышеупомянутый вопрос: установка SERIALIZABLE делает транзакции очень медленными, чего мы снова не хотим.
Фактически потребление времени транзакции находится в следующем размере:
SERIALIZABLE › REPEATABLE_READ › READ_COMMITTED › READ_UNCOMMITTED
Таким образом, параметр READ_UNCOMMITTED является самым быстрым.
Резюме
На самом деле нам нужно проанализировать вариант использования и выбрать уровень изоляции, чтобы оптимизировать время транзакции, а также предотвратить большинство аномалий.
Обратите внимание, что базы данных по умолчанию могут иметь параметр REPEATABLE_READ. Администраторы и архитекторы могут быть склонны выбирать этот параметр по умолчанию, чтобы продемонстрировать лучшую производительность платформы.
person
Subhadeep Ray
schedule
11.09.2017