Если вы выберете слишком много строк - Sql Server увеличит блокировку до уровня таблицы. Вместо этого вы можете ударить по количеству возможных блокировок или памяти
OR
Вы используете SNAPSHOT
уровень изоляции - тогда вы можете применять ROWLOCK
подсказку только с HOLDLOCK
или UPDLOCK
подсказками одновременно
Обновление:
Вы можете оформить свое заявление с помощью
DBCC TRACEON(-1,3604,1200) WITH NO_INFOMSGS;
Here is your statement
DBCC TRACEOFF(-1,3604,1200) WITH NO_INFOMSGS;
и посмотрите - какие замки взяты, удерживаются и снимаются во время пробега
ОБНОВЛЕНО
DBCC TRACEON (-1, 3604, 1200)
НАЧАТЬ ТРАН
ОБНОВЛЕНИЕ [Заказ]
с (ROWLOCK)
SET ProductId = 3
ГДЕ CustomerId = 1
Выполнение DBCC завершено. Если DBCC напечатал сообщения об ошибках, обратитесь к системному администратору.
Процесс 54 получает блокировку IX для ОБЪЕКТА: 16: 229575856: 0 (класс bit2000000 ref1) результат: ОК
Процесс 54 получает блокировку IU на PAGE: 16: 1: 196 (класс bit0 ref1), результат: OK
Процесс 54 получает блокировку U для RID: 16: 1: 196: 0 (класс bit0 ref1). Результат: OK
Процесс 54 получает блокировку IX на странице: 16: 1: 196 (класс bit2000000 ref0) результат: ОК
Процесс 54 получает X-блокировку на RID: 16: 1: 196: 0 (класс bit2000000 ref0). Результат: OK
Процесс 54 освобождает ссылку на блокировку в МПОГ: 16: 1: 196: 0
Процесс 54 получает блокировку U для RID: 16: 1: 196: 1 (класс bit0 ref1). Результат: OK
Процесс 54 снятие блокировки на МПОГ: 16: 1: 196: 1
Процесс 54 освобождает ссылку на блокировку на странице: 16: 1: 196
(затронут 1 ряд)