Я очень новичок в SQL Server и хотел бы понять, будут ли следующие, очень простые select
утверждения принимать какие-либо блокировки.
Select * from Student;
Пожалуйста, рассмотрите случай, когда инструкция не будет выполняться внутри begin tran
блока.
sql-server
sql-server-2008
locking
Новый разработчик
источник
источник
Ответы:
Да, он принимает общую блокировку для строк, которые он читает по умолчанию (он также принимает блокировку Intent Shared для всех страниц кластерного индекса, который он будет читать), это делается для предотвращения грязного чтения. Однако есть способы обойти это (SQL Server имеет подсказку nolock). Если инструкция не находится в BEGIN TRAN, блокировка снимается после выполнения инструкции SELECT.
Более подробную информацию можно найти здесь:
http://msdn.microsoft.com/en-us/library/ms184286(v=sql.105).aspx http://www.sqlteam.com/article/introduction-to-locking-in-sql-server
источник
Это распространенное заблуждение , что
SELECT
запрос работает на по умолчаниюREAD COMMITTED
уровня изоляции транзакции будет всегда берет разделяемые блокировки для предотвращения грязного чтения.SQL Server может избежать принятия общих блокировок на уровне строк, когда нет опасности чтения незафиксированных данных без них (хотя все еще используются блокировки более высокого уровня Intent-Shared (IS)).
Даже если общие блокировки строк будут приняты (возможно , потому , что другая параллельная транзакция изменила страницу строка включена) , они могут быть освобождены задолго до
SELECT
Завершает заявление.В большинстве случаев строка разблокируется непосредственно перед тем, как сервер обработает следующую строку. Существуют обстоятельства, при которых общие блокировки, принятые на уровне изоляции по умолчанию, сохраняются до конца текущего оператора, но не до конца транзакции .
Переопределение текущего уровня изоляции с помощью
NOLOCK
табличной подсказки почти всегда является плохой идеей .Блокировка - это деталь реализации. SQL Server принимает блокировки при необходимости, чтобы гарантировать, что он соответствует семантическим гарантиям, предоставляемым текущим уровнем изоляции . Конечно, бывают моменты, когда полезно немного узнать о причинах взлома блокировок, но попытки предсказать их очень часто приводят к обратным результатам.
SQL Server предоставляет широкий спектр уровней изоляции; выберите тот, который обеспечивает гарантии и поведение, в котором нуждаются ваши потребители данных.
источник