Базы данных. Вводный курс


Предикатные синхронизационные блокировки - часть 4


Достаточно очевидно следующее утверждение:

Пусть имеются два простых условия scond1

и scond2. Пусть транзакция T1

запрашивает блокировку scond1, а транзакция T2

– scond2

в режимах, которые были бы несовместимы, если бы scond1

и scond2

являлись не условиями, а объектами базы данных (S-X, X-S, X-X). Эти блокировки совместимы в том и только в том случае, когда прямоугольники, соответствующие scond1

и scond2, не пересекаются.

Это утверждение действительно очевидно (каждому k-мерному прямоугольнику в n-мерном пространстве возможных значений кортежей Tab

соответствует некоторое подмножество возможных значений кортежей, и отсутствие пересечения у двух прямоугольников гарантирует отсутствие конфликтов транзакций), но для наглядности на рис. 13.5 приводится иллюстрирующий пример, показывающий, что в каких бы режимах не требовала транзакция T1

блокировки условия (0 < a < 5) & (b = 5), а транзакция T2

– блокировки условия (0 < a <6) & (0 < b <4), эти блокировки всегда будут совместимы.


Рис. 13.5. Простые условия, блокировки которых совместимы

Интересно, что при поддержке такой системы блокировок простых условий можно обойтись без гранулированных блокировок. В частности, чтобы гарантированно заблокировать таблицу целиком, достаточно заблокировать условие &1

i
n

(min(mi) < имя_поляi

< max(mi)). Чтобы заблокировать базу данных, достаточно заблокировать условие, являющееся конъюнкцией условий блокировки всех таблиц этой базы данных.

Заметим, что блокировки простых условий описываются таблицами, немногим отличающимися от таблиц традиционных синхронизаторов с гранулированными блокировками. Поэтому введение в СУБД механизма предикатных блокировок не приводит к значительным усложнениям.




Начало  Назад  Вперед



Книжный магазин