Skip to content

34. Гранулярность блокировок, иерархии блокировок и эскалация блокировок

Pandas edited this page Jan 2, 2018 · 2 revisions

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

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

Типы блокировок по ресурсам

Ресурс Блокировка
RID блокировка одной строки в куче.
KEY Блокировка строки в индексе, используемая для защиты диапазонов значений ключа в сериализуемых транзакциях.
PAGE 8-килобайтовая страница в базе данных, например страница данных или индекса.
EXTENT Упорядоченная группа из восьми страниц, например страниц данных или индекса.
HoBT Блокировка, защищающая сбалансированное дерево (индекс) или кучу страниц данных в таблице, не имеющей кластеризованного индекса.
table Таблица полностью, включая все данные и индексы.
FILE Файл базы данных.
APPLICATION Определяемый приложением ресурс.
METADATA Блокировки метаданных.

Иерархия

Блокировка Описание
Блокировка с намерением совмещаемого доступа (IS) Защищает запрошенные или полученные совмещаемые блокировки на некоторых (но не на всех) ресурсах на более низком уровне иерархии.
Блокировка с намерением монопольного доступа (IX) Режим IX является расширенным режимом IS, кроме того, он защищает запрос на совмещаемые блокировки на ресурсах более низкого уровня.
Совмещаемая блокировка с намерением монопольного доступа (SIX) Защищает запрошенные или полученные совмещаемые блокировки на всех ресурсах более низкого уровня иерархии, а также блокировки с намерением на некоторых (но не всех) ресурсах более низкого уровня. На ресурсах верхнего уровня допускаются одновременные блокировки IS.
Блокировка с намерением обновления (IU) Защищает запрошенные или полученные блокировки обновления на всех ресурсах более низкого уровня в иерархии. Блокировки IU применяются только на страничных ресурсах.
Совмещаемая блокировка с намерением обновления (SIU) Сочетание блокировок S и IU в результате раздельного запрашивания этих блокировок и одновременного удержания их обеих.
Блокировка обновления с намерением монопольного доступа (UIX) Сочетание блокировок U и IX в результате раздельного запрашивания этих блокировок и одновременного удержания их обеих.

Динамические блокировки (Эскалация)

Использование блокировок низкого уровня, например блокировок строк, увеличивает параллелизм, поскольку снижается вероятность одновременной блокировки области данных двумя различными транзакциями. Использование блокировок низкого уровня также увеличивает их количество, что приводит к большей загрузке ресурсов. При использовании блокировок страниц и таблиц высокого уровня загруженность снижается, однако при этом уменьшается степень параллелизма. Imgur

Clone this wiki locally