В информатике множественная гранулярность блокировки ( MGL ) — это метод блокировки, используемый в системах управления базами данных (СУБД) и реляционных базах данных .
При блокировке множественной гранулярности блокировки устанавливаются на объекты , содержащие другие объекты. MGL использует иерархическую природу отношения «содержит» . Например, база данных может иметь файлы, содержащие страницы, содержащие записи. Это можно рассматривать как дерево объектов, где каждый узел содержит своих потомков. Блокировка этой структуры (например, общая или исключительная блокировка) блокирует целевой узел, а также всех его потомков. [1]
Блокировка с множественной гранулярностью обычно используется вместе с нестрогой двухфазной блокировкой, чтобы гарантировать сериализуемость .
В дополнение к общим ( S ) блокировкам и исключительным ( X ) блокировкам из других схем блокировки, таких как строгая двухфазная блокировка, MGL также использует намеренные «блокировки», которые не блокируют узел напрямую, а вместо этого обозначают существование или намерение добавить блокировку указанного типа ниже в иерархии узлов. Намеренные блокировки включают «намерение совместное» ( IS ), «намерение исключительное» ( IX ) и комбинированные «совместные и намерение исключительное» ( SIX ) блокировки. Блокировки IS конфликтуют с блокировками X , в то время как блокировки IX конфликтуют с блокировками S и X. Нулевая блокировка ( NL ) совместима со всем .
Чтобы заблокировать узел в S (или X ), MGL блокирует транзакцию на всех его предках с помощью IS (или IX ), поэтому если транзакция блокирует узел в S (или X ), никакая другая транзакция не может получить доступ к его предкам в X (или S и X ). Этот протокол показан в следующей таблице:
Получить | Обязательно иметь у всех предков |
ИС или С | ИС или IX |
IX, ШЕСТЬ или X | IX или ШЕСТЬ |
Определение того, какой уровень детализации использовать для блокировки, осуществляется путем блокировки самого тонкого уровня (т. е. на самом нижнем листе), а затем эскалации этих блокировок на более высокие уровни в файловой иерархии, чтобы охватить больше записей или элементов файла по мере необходимости в процессе, известном как «эскалация блокировки». Режимы блокировки MGL совместимы друг с другом, как определено в следующей матрице.
Режим | НЛ | ЯВЛЯЕТСЯ | IX | С | ШЕСТЬ | Х |
---|---|---|---|---|---|---|
НЛ | Да | Да | Да | Да | Да | Да |
ЯВЛЯЕТСЯ | Да | Да | Да | Да | Да | Нет |
IX | Да | Да | Да | Нет | Нет | Нет |
С | Да | Да | Нет | Да | Нет | Нет |
ШЕСТЬ | Да | Да | Нет | Нет | Нет | Нет |
Х | Да | Нет | Нет | Нет | Нет | Нет |
Следуя протоколу блокировки и матрице совместимости, если одна транзакция удерживает узел в режиме S, никакие другие транзакции не могут заблокировать ни одного предка в режиме X.