Я хотел бы понять, будут ли следующие, очень простые операторы select принимать какие-либо блокировки
Это распространенное заблуждение , что SELECTзапрос работает на по умолчанию READ COMMITTEDуровня изоляции транзакции будет всегда берет разделяемые блокировки для предотвращения грязного чтения.
SQL Server может избежать принятия общих блокировок на уровне строк, когда нет опасности чтения незафиксированных данных без них (хотя все еще используются блокировки более высокого уровня Intent-Shared (IS)).
Даже если общие блокировки строк будут приняты (возможно , потому , что другая параллельная транзакция изменила страницу строка включена) , они могут быть освобождены задолго до SELECTЗавершает заявление.
В большинстве случаев строка разблокируется непосредственно перед тем, как сервер обработает следующую строку. Существуют обстоятельства, при которых общие блокировки, принятые на уровне изоляции по умолчанию, сохраняются до конца текущего оператора, но не до конца транзакции .
Переопределение текущего уровня изоляции с помощью NOLOCKтабличной подсказки почти всегда является плохой идеей .
Блокировка - это деталь реализации. SQL Server принимает блокировки при необходимости, чтобы гарантировать, что он соответствует семантическим гарантиям, предоставляемым текущим уровнем изоляции . Конечно, бывают моменты, когда полезно немного узнать о причинах взлома блокировок, но попытки предсказать их очень часто приводят к обратным результатам.
SQL Server предоставляет широкий спектр уровней изоляции; выберите тот, который обеспечивает гарантии и поведение, в котором нуждаются ваши потребители данных.