Настройка блокировки индекса

Microsoft SQL Server Database Engine использует механизм динамической блокировки, при которой для большинства запросов выбирается наилучшая степень гранулярности. Ограничение уровней блокировок может принести пользу, когда методы доступа хорошо понятны и постоянны.

Допустим, приложение базы данных использует таблицу уточняющих запросов, которая еженедельно обновляется во время пакетной обработки. В этом случае лучше всего отключить блокировку страниц и строк, чтобы позволить всем параллельным процессам получить общую (S) блокировку и снизить накладные расходы. Во время еженедельной пакетной обработки соответствующий процесс получает монопольную (X) блокировку и обновляет таблицу целиком.

Степень гранулярности блокировок индекса настраивается при помощи инструкций CREATE INDEX и ALTER INDEX. Ее можно настроить в ограничениях PRIMARY KEY и UNIQUE инструкций CREATE TABLE и ALTER TABLE. Кроме того, системная хранимая процедура sp_indexoption, обеспечивающая обратную совместимость, также позволяет настроить степень гранулярности. Текущее значение параметра для заданного индекса можно узнать при помощи функции INDEXPROPERTY. Для любого индекса можно запретить блокировку страниц, блокировку строк или их комбинацию.

Запрещенные блокировки При обращении к индексу используются

Уровня страниц

Блокировки уровня строк и таблиц

Уровня строк

Блокировки уровня страниц и таблиц

Уровня строк и страниц

Блокировки уровня таблиц

Например, когда известно, что при обращении к таблице возникает серьезная конкуренция, полезно запретить блокировку страниц и оставить только блокировку строк. Если для доступа к таблице или индексу всегда используется просмотр, можно отключить блокировку страниц и строк и разрешить только блокировку таблицы.

ms189076.note(ru-ru,SQL.90).gifВажно!
Оптимизатор запросов компонента Database Engine практически всегда выбирает правильную степень гранулярности блокировки. Выбор оптимизатора отменять не рекомендуется. Отключение уровня блокировки может неблагоприятно отразиться на эффективности параллельного доступа к таблице. Например, если запретить блокировку страниц и строк в большой таблице, к которой обращается большое количество пользователей, производительность может значительно ухудшиться. Прежде чем получить доступ к таблице, пользователям придется ждать, пока не будет снята блокировка таблицы.

См. также

Другие ресурсы

ALTER INDEX (Transact-SQL)
ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE TABLE (Transact-SQL)
INDEXPROPERTY (Transact-SQL)
sp_indexoption (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005