Возможно ли принудительное блокирование на уровне строк в SQL Server?

Я вижу, как отключить блокировку на уровне строк и на уровне страниц в SQL Server, но не могу найти способ заставить SQL Server использовать блокировку на уровне строк. Есть ли способ заставить SQL Server использовать блокировку на уровне строк и НЕ использовать блокировку на уровне страниц?

3 ответа

Решение

Вы можете использовать подсказку ROWLOCK, но AFAIK SQL может решить увеличить его, если у него не хватает ресурсов

Из документа:

ROWLOCK Указывает, что блокировки строк выполняются, когда обычно используются блокировки страниц или таблиц. При указании в транзакциях, работающих на уровне изоляции SNAPSHOT, блокировки строк не выполняются, если ROWLOCK не объединен с другими табличными подсказками, которые требуют блокировок, такими как UPDLOCK и HOLDLOCK.

а также

Подсказки блокировок ROWLOCK, UPDLOCK и XLOCK, которые получают блокировки на уровне строк, могут устанавливать блокировки на индексные ключи, а не на реальные строки данных. Например, если таблица имеет некластеризованный индекс, а оператор SELECT, использующий подсказку о блокировке, обрабатывается индексом покрытия, блокировка получается для ключа индекса в индексе покрытия, а не для строки данных в базовой таблице.

И, наконец, это дает довольно подробное объяснение эскалации блокировки в SQL Server 2005, которая была изменена в SQL Server 2008.

Существует также, очень глубоко: блокировка в движке базы данных (в книгах онлайн)

Итак, в общем

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Должно быть в порядке, но в зависимости от индексов и нагрузки на сервере, это может привести к эскалации блокировки страницы.

Используйте предложение ALLOW_PAGE_LOCKS в ALTER / CREATE INDEX:

ALTER INDEX indexname ON tablename SET (ALLOW_PAGE_LOCKS = OFF);

Вы не можете заставить оптимизатор что-либо делать, но вы можете руководить этим.

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Смотрите - Управление SQL Server с помощью блокировки и подсказок

Другие вопросы по тегам