Как работает уровень изоляции транзакций в отношении блокировок чтения / записи и чтения / записи?

#sql #sql-server #sql-server-2016

#sql #sql-сервер #sql-server-2016

Вопрос:

Я понимаю проблему с грязным чтением, неповторяемым чтением и фантомным чтением.

Также я читал об уровнях изоляции: чтение без фиксации, чтение с фиксацией, повторяемое чтение, сериализуемое.

Я также понимаю, что чтение приводит к общей блокировке. Для получения общей блокировки не должно быть активной исключающей блокировки. Где в качестве результатов вставки / обновления / удаления используется эксклюзивная блокировка. Чтобы получить эксклюзивную блокировку, не должно быть никакой другой активной эксклюзивной или общей блокировки.

Для каждого уровня ни в одной из прочитанных мной статей не объясняется концепция уровня изоляции в отношении:

  1. Применим ли этот уровень к транзакции чтения или записи или к обоим.
  2. Применяет ли чтение / запись какие-либо блокировки чтения / записи, отличные от приведенного выше объяснения
  3. Транзакция — это концепция «все или ничего» в отношении записи. В то время как уровень изоляции транзакций является концепцией только для чтения?

Если кто-нибудь может рассказать об этих моментах для каждого уровня, это будет очень полезно.

Комментарии:

1. Я подумал, что документация достаточно ясна: 1. Управляет блокировкой и версиями строк в операторах Transact-SQL . И начиная с его имени, он контролирует все транзакции в сеансе. Нет причин скрывать некоторые детали в описании к этому заявлению (я надеюсь, что MS опубликует все исключения для случаев внутри статьи). 2. Выбор уровня изоляции транзакций не влияет на блокировки, полученные для защиты изменений данных .

Ответ №1:

Вы можете найти эти статьи Пола Уайта очень полезными.

Но в ответ на ваши вопросы:

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

  1. Уровень изоляции применим к обоим типам транзакций. SNAPSHOT в частности, имеет разные эффекты в зависимости от того, задействована запись или нет.
  2. Существуют также блокировки намерений, которые являются эквивалентными версиями других блокировок и позволяют наращивать блокировку от блокировки страницы или строки до таблицы / раздела.
    У вас также есть блокировки модификации схемы, которые не позволяют никому изменять определения таблицы / столбца (или индекса) из-под вас (это применимо даже к NOLOCK ).
  3. Уровень изоляции определяет, сколько блокируется, это строка или диапазон? Он также указывает, что происходит с блокировкой после ее использования. Удерживается ли он до конца транзакции или освобождается, как только происходит фиксация?