Гранулярность блокировок и иерархии блокировок

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

Компонент Database Engine часто получает блокировки на нескольких уровнях гранулярности одновременно, чтобы полностью защитить ресурс. Такая группа блокировок на нескольких уровнях гранулярности называется иерархией блокировки. Например, чтобы полностью защитить операцию чтения индекса, экземпляру компоненту Database Engine может потребоваться получить разделяемые блокировки на строки и намеренные разделяемые блокировки на страницы и таблицу.

Следующая таблица содержит перечень ресурсов, которые могут блокироваться компонентом Database Engine.

Ресурс

Описание

RID

Идентификатор строки, используемый для блокировки одной строки в куче.

KEY

Блокировка строки в индексе, используемая для защиты диапазонов значений ключа в сериализуемых транзакциях.

PAGE

8-килобайтовая (КБ) страница в базе данных, например страница данных или индекса.

EXTENT

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

HoBT

Куча или сбалансированное дерево. Блокировка, защищающая сбалансированное дерево (индекс) или кучу страниц данных в таблице, не имеющей кластеризованного индекса.

TABLE

Таблица полностью, включая все данные и индексы.

FILE

Файл базы данных.

APPLICATION

Определяемый приложением ресурс.

METADATA

Блокировки метаданных.

ALLOCATION_UNIT

Единица распределения.

DATABASE

База данных, полностью.

ПримечаниеПримечание

На блокировки HoBT и TABLE может влиять параметр LOCK_ESCALATION инструкции ALTER TABLE.