Гранулярность блокировок и иерархии блокировок
MicrosoftSQL 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. |