ROWLOCK на сервере sql - PullRequest
       1

ROWLOCK на сервере sql

4 голосов
/ 18 января 2012

У меня есть таблица для обновления без индексации в предложении where, поэтому я использую ROWLOCK в скрипте обновления, надеясь получить блокировку строки вместо блокировки таблицы, но не повезло ... так что же тогда является функцией ROWLOCK?Я использовал его в операторе выбора, но все еще блокировал всю таблицу ... это так раздражает!

1 Ответ

4 голосов
/ 18 января 2012

Если вы выберете слишком много строк - 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 ряд)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...