Вопрос

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

Это было полезно?

Решение

Вы можете использовать подсказку Rowlock, но Afaik SQL может решить обострить его, если он работает низко

От доктора:

Rowlock указывает, что блокировки строк принимаются, когда обычно принимаются блокировки страниц или таблицы. При указании в транзакциях, работающих на уровне выделения снимков, блокировки строк не принимаются, если Rowlock не сочетается с другими подсказками таблицы, которые требуют блокировки, таких как Updlock и Holdlock.

и

Замок намекает на Rowlock, Updlock и Xlock, которые приобретают блокировки на уровне строк, могут размещать блокировки на ключах индекса, а не фактические строки данных. Например, если таблица имеет некластеризированный индекс, а оператор SELECT с использованием подсказки блокировки обрабатывается индексом покрытия, блокировка получает в клавиш индекса в индексе покрытия, а не в строке данных в базовой таблице.

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

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

Итак, в целом

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

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

Другие советы

Используйте пункт alluck_page_locks Изменить/создать индекс:

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top