Здавалка
Главная | Обратная связь

Гранулированные синхронизационные блокировки



Подобные рассуждения привели к разработке механизма гранулированных синхронизационных блокировок. При применении этого подхода синхронизационные блокировки могут запрашиваться по отношению к объектам разного уровня: файлам, таблицам и кортежам. Требуемый уровень объекта определяется тем, какая операция выполняется (например, для выполнения операции уничтожения таблицы объектом синхронизационной блокировки должна быть вся таблица, а для выполнения операции удаления кортежа – этот кортеж). Объект любого уровня может быть заблокирован в режиме S или X.

Для согласования блокировок разного уровня вводятся специальный протокол гранулированных блокировок и новые типы блокировок. Коротко говоря, перед установкой блокировки на некоторый объект базы данных в режиме S или X соответствующий объект верхнего уровня должен быть заблокирован в режиме IS, IX или SIX. Что же собой представляют эти режимы блокировок?

Блокировка в режиме IS (Intented for Shared lock) некоторого составного объекта o базы данных означает намерение заблокировать некоторый объект o', входящий в o, в совместном режиме (режиме S). Например, при намерении читать кортежи из таблицы Tab эта таблица должна быть заблокирована в режиме IS (а до этого в таком же режиме должен быть заблокирован файл, в котором располагается таблица Tab).

Блокировка в режиме IX (Intented for eXclusive lock) некоторого составного объекта o базы данных означает намерение заблокировать некоторый объект o', входящий в o, в монопольном режиме (режиме X). Например, для удаления кортежей из таблицы Tab эта таблица должна быть заблокирована в режиме IX (а до этого в таком же режиме должен быть заблокирован файл, в котором располагается таблица Tab).

Блокировка в режиме SIX (Shared, Intented for eXclusive lock) некоторого составного объекта o базы данных означает совместную блокировку всего этого объекта с намерением впоследствии блокировать какие-либо входящие в него объекты в монопольном режиме (режиме X). Например, если выполняется длинная операция просмотра таблицы Tab с возможностью удаления некоторых просматриваемых кортежей, то экономичнее всего заблокировать таблицу Tab в режиме SIX (а до этого заблокировать в режиме IS файл, в котором располагается таблица Tab).

В таб. 9.2 приведена таблица совместимости блокировок S, X, IS, IX и SIX. Немного поясним правила совместимости. Должно быть понятно, что для атомарных объектов разумны только блокировки в режимах S и X, для которых правила совместимости остаются такими же, как были показаны в таб. 9.1. Пусть теперь o – это некоторый составной объект.

Тогда блокировка объекта o в режиме X в транзакции T1 не совместима с блокировкой этого объекта в режимах X, S, IX, IS или SIX в транзакции T2. Действительно, блокировка объекта o в режиме X в транзакции T1 направлена на то, чтобы изменять объект o целиком. Несовместимость блокировки объекта o в режиме X в транзакции T1 с его блокировкой в режиме X или IX в транзакции T2 устраняет конфликты транзакций T1 и T2 вида W/W. Несовместимость блокировки объекта o в режиме X в транзакции T1 с его блокировкой в режиме S или IS в транзакции T2 устраняет конфликты транзакций T1 и T2 вида W/R. Наконец, несовместимость блокировки объекта o в режиме X в транзакции T1 с его блокировкой в режиме SIX в транзакции T2 устраняет конфликты транзакций T1 и T2 вида W/R и W/W.

Таблица 9.2. Совместимость блокировок S, X, IS, IX и SIX

  X S IX IS SIX
- да да да да да
X нет нет нет нет нет
S нет да нет да нет
IX нет нет да да нет
IS нет да да да да
SIX нет нет нет да нет

Блокировка объекта o в режиме S в транзакции T1 совместима с блокировкой этого объекта в режимах S или IS в транзакции T2, поскольку эти блокировки в транзакциях T1 и T2 направлены только на то, чтобы только читать некоторые объекты o', входящие в o. Блокировка объекта o в режиме S в транзакции T1 не совместима с блокировкой этого объекта в режимах X, IX или SIX в транзакции T2, поскольку любая из этих блокировок направлена на то, чтобы изменять в транзакции T2 объект o целиком или какой-либо объект o', входящий в o. Несовместимость блокировки объекта o в режиме S в транзакции T1 с блокировкой этого объекта в режимах X, IX или SIX в транзакции T2, тем самым, устраняет конфликты транзакций T1 и T2 вида R/W.

Блокировка объекта o в режиме IХ в транзакции T1 совместима с блокировкой этого же объекта в режимах IS или IX в транзакции T2. Действительно, блокировка объекта o в режиме IX в транзакции T1 направлена на то, чтобы в этой транзакции изменять какой-либо объект o', входящий в o, а блокировка этого же объекта в режиме IS в транзакции T2 – на то, чтобы читать в транзакции T2 какой-либо объект o'', входящий в o. Если объекты o' и o'' – разные, то конфликт транзакций T1 и T2 не возникнет. Если o' = o'', то перед изменением этот объект будет заблокирован в транзакции T1 в режиме X, а перед чтением – в транзакции T2 в режиме S. Несовместимость этих блокировок позволит избежать конфликта транзакций T1 и T2 вида W/R, и для этого не требуется несовместимость блокировок IX и IS объекта o. Аналогично обосновывается совместимость блокировок IX и IX. Блокировка IХ не совместима с блокировкой S, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида W/R. Блокировка IХ не совместима с блокировкой X, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида W/W. Наконец, блокировка IХ не совместима с блокировкой SIX, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида W/R или W/W.

Блокировка объекта o в режиме IS в транзакции T1 совместима с блокировкой этого же объекта в режимах S, IS, IX или SIX в транзакции T2. Совместимость с блокировкой в режиме S или IS уже обосновывалась. Покажем, что блокировка объекта o в режиме IS в транзакции T1 совместима с блокировкой того же объекта в режиме IX в транзакции T2. Действительно, блокировка объекта o в режиме IS в транзакции T1 направлена на то, чтобы в этой транзакции читать какой-либо объект o', входящий в o, а блокировка этого же объекта в режиме IX в транзакции T2 – на то, чтобы в транзакции T2 изменять какой-либо объект o'', входящий в o. Если объекты o' и o'' – разные, то конфликт транзакций не возникнет. Если o' = o'', то перед чтением этот объект будет заблокирован в транзакции T1 в режиме S, а перед изменением – в транзакции T2 в режиме X. Несовместимость этих блокировок позволит избежать конфликта транзакций T1 и T2 вида R/W, и для этого не требуется несовместимость блокировок IS и IX объекта o. Аналогично можно показать совместимость блокировок IS и SIX. Несовместимость блокировок IS и X очевидна, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида R/W.

Блокировка объекта o в режиме SIX в транзакции T1 позволяет этой транзакции читать любой объект o', входящий в o, без его дополнительной блокировки и изменять любой объект o', входящий в o, с его предварительной блокировкой в режиме X. Эта блокировка совместима с блокировкой объекта o в режиме IS в транзакции T2. Действительно, блокировка объекта o в режиме IS в транзакции T2 направлена на то, чтобы в транзакции T2 читать какой-либо объект o', входящий в o. Перед этим в транзакции T2 должна быть установлена блокировка объекта o' в режиме S. К этому моменту у объекта o' может отсутствовать явная блокировка, установленная в транзакции T1, что, в соответствии с семантикой блокировки SIX, означает наличие неявной блокировки o' по чтению. Очевидно, что в этом случае конфликт транзакций T1 и T2 не возникает. К этому же моменту у объекта o' может иметься блокировка в режиме X, установленная в транзакции T1. В этом случае запрос блокировки объекта o' в режиме S удовлетворен не будет, и конфликт транзакций T1 и T2 вида W/R будет предотвращен без потребности в несовместимости блокировок SIX и IS. Блокировка объекта o в режиме SIX в транзакции T1 не совместима с блокировкой объекта o в режиме X в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида R/W. Блокировка объекта o в режиме SIX в транзакции T1 не совместима с блокировкой объекта o в режиме S или IS в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида W/R при доступе к некоторым объектам o', входящим в o. Наконец, блокировка объекта o в режиме SIX в транзакции T1 не совместима с блокировкой объекта o в режиме IX или SIX в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида R/W при доступе к некоторым объектам o', входящим в o.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.