#sql #sql-server #sql-server-2016
#sql #sql-сервер #sql-server-2016
Вопрос:
Я понимаю проблему с грязным чтением, неповторяемым чтением и фантомным чтением.
Также я читал об уровнях изоляции: чтение без фиксации, чтение с фиксацией, повторяемое чтение, сериализуемое.
Я также понимаю, что чтение приводит к общей блокировке. Для получения общей блокировки не должно быть активной исключающей блокировки. Где в качестве результатов вставки / обновления / удаления используется эксклюзивная блокировка. Чтобы получить эксклюзивную блокировку, не должно быть никакой другой активной эксклюзивной или общей блокировки.
Для каждого уровня ни в одной из прочитанных мной статей не объясняется концепция уровня изоляции в отношении:
- Применим ли этот уровень к транзакции чтения или записи или к обоим.
- Применяет ли чтение / запись какие-либо блокировки чтения / записи, отличные от приведенного выше объяснения
- Транзакция — это концепция «все или ничего» в отношении записи. В то время как уровень изоляции транзакций является концепцией только для чтения?
Если кто-нибудь может рассказать об этих моментах для каждого уровня, это будет очень полезно.
Комментарии:
1. Я подумал, что документация достаточно ясна: 1. Управляет блокировкой и версиями строк в операторах Transact-SQL . И начиная с его имени, он контролирует все транзакции в сеансе. Нет причин скрывать некоторые детали в описании к этому заявлению (я надеюсь, что MS опубликует все исключения для случаев внутри статьи). 2. Выбор уровня изоляции транзакций не влияет на блокировки, полученные для защиты изменений данных .
Ответ №1:
Вы можете найти эти статьи Пола Уайта очень полезными.
Но в ответ на ваши вопросы:
Во-первых, общие и эксклюзивные блокировки определяют, что разрешено делать одновременно с блокировкой. Уровень изоляции определяет, сколько заблокировано и как долго.
- Уровень изоляции применим к обоим типам транзакций.
SNAPSHOT
в частности, имеет разные эффекты в зависимости от того, задействована запись или нет. - Существуют также блокировки намерений, которые являются эквивалентными версиями других блокировок и позволяют наращивать блокировку от блокировки страницы или строки до таблицы / раздела.
У вас также есть блокировки модификации схемы, которые не позволяют никому изменять определения таблицы / столбца (или индекса) из-под вас (это применимо даже кNOLOCK
). - Уровень изоляции определяет, сколько блокируется, это строка или диапазон? Он также указывает, что происходит с блокировкой после ее использования. Удерживается ли он до конца транзакции или освобождается, как только происходит фиксация?