Файл: Управление данными (пособие).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 1627

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

186

родительский

 

объект

 

при

 

блокировании

 

дочернего

 

объекта

Например

,  

при

 

намерении

 

задать

 

S-

блокировку

 

кортежа

 

отношения

на

 

отношение

включающее

 

этот

 

кортеж

вообще

 

говоря

можно

 

наложить

 

любую

 

из

 

блокировок

 

типа

 

IS

S

IX

SIX

X

При

 

намерении

 

задать

 

Х

-

блокировку

 

кортежа

на

 

отношение

 

можно

 

наложить

 

любую

 

из

 

блокировок

 

типа

 

IX

SIX

X

Конкретный

 

выбор

 

осуществляется

 

из

 

контекста

 

выполняемой

 

транзакции

Посмотрим

как

 

разрешается

 

проблема

 

фиктивных

 

элементов

 (

фантомов

)

 

с

 

использованием

 

протокола

 

блокировок

 

по

 

намерению

 

при

 

доступе

 

к

 

данным

Транзакция

 

А

 

дважды

 

выполняет

 

выборку

 

строк

 

с

 

одним

 

и

 

тем

 

же

 

условием

Между

 

выборками

 

вклинивается

 

транзакция

 

В

которая

 

добавляет

 

новую

 

строку

удовлетворяющую

 

условию

 

отбора


background image

 

187

Транзакция

 

А

 

Время

Транзакция

 

В

 

 

 

 

Блокирует

 

отношение

 

IS

-

блокировкой

 

с

 

намерением

 

потом

 

блокировать

 

кортежи

  

t

 

 

--- 

Блокирует

 

S

-

блокировкой

 

кортежи

удовлетворяющие

 

условию

 

α

  

(

заблокировано

 

n

 

строк

)  

t

 

 

--- 

Выборка

 

кортежей

удовлетворяющих

 

условию

 

α

  (

выбрано

 

n

 

строк

t

 3 

 

--- 

--- 

 

t

43 

 

 

Попытка

 

IX-

блокировки

 

отношения

 

с

 

намерением

 

потом

 

вставить

 

кортеж

 

отвергается

 

из

-

за

 

конфликта

 

с

 

S

-

блокировкой

 

транзакции

 

А

 

--- 

t

 5

Ожидание

… 

 

 

 

Блокирует

 

S

-

блокировкой

 

кортежи

удовлетворяющие

 

условию

 

α

  

(

заблокировано

 

n

 

строк

)  

t

 6 

 

 

Ожидание

… 

Выборка

 

кортежей

удовлетворяющих

 

условию

 

α

  (

выбрано

 

n

 

строк

t

 7 

 

Ожидание

… 

Фиксация

 

транзакции

  

и

 

снятие

 

блокировок

 

t

 8 

 

Ожидание

… 

--- 

 

t

 9 

 

Блокирует

 

отношение

 

IX-

блокировкой

 

с

 

намерением

 

потом

 

вставить

 

кортеж

 

(

теперь

 

разрешается

--- 

t

 10 

 

Вставка

 

нового

 

кортежа

удовлетворяющего

 

условию

 

а

 

--- 

t

 11 

 

Фиксация

 

транзакции

  

и

 

снятие

 

блокировок

 

 

 

 

Транзакция

 

А

 

дважды

 

корректно

 

выбирает

 

n

 

строк

 

Все

 

правильно

 

 

 

Транзакция

 

В

 

перед

 

попыткой

 

вставить

 

новую

 

строку

 

должна

 

наложить

 

на

 

таблицу

 

IX

-

блокировку

или

 

более

 

сильную

 (

SIX

 

и

 

Х

). 

Тогда

 

транзакция

 

А

для

 

предотвращения

 

возможного

 

конфликта

должна

 

наложить

 

такую

 

блокировку

 

на

 

таблицу

которая

 

не

 

позволила

 

бы

 

транзакция

 

В

 

наложить

 

IX-

блокировку

По

 

таблице

 

совместимости

 

блокировок

 

определяем

что

 

транзакция

 

А

 

должна

 

наложить

 

на

 

таблицу

 

S

или

 

SIX

или

 

Х

-

блокировку

. (

Блокировки

 

IS

 

недостаточно

т

.

к

эта

 

блокировка

 

позволяет

 

транзакции

 

В

 

наложить

 

IX

 – 

блокировку

 

для

 

последующей

 

вставки

 

строк

). 


background image

 

188

Таким

 

образом

 

проблема

 

фиктивных

 

элементов

 (

фантомов

решается

если

 

транзакция

 

А

 

использует

 

для

 

таблицы

 

S

-

блокировку

 

по

 

намерению

 

или

 

более

 

сильную

Следует

 

заметить

что

 

так

 

как

 

транзакция

 

А

 

собирается

 

только

 

читать

 

строки

 

таблицы

то

 

минимально

 

необходимым

 

условием

 

в

 

соответствии

 

с

 

протоколом

 

блокировок

 

по

 

намерению

 

является

 

преднамеренная

 

IS

-

блокировка

 

таблицы

Однако

 

этот

 

тип

 

блокировки

 

не

 

предотвращает

 

появление

 

фантомов

Таким

 

образом

пользователь

 

может

 

запускать

 

транзакцию

 

А

 

с

 

разными

 

уровнями

 

изолированности

 – 

предотвращая

 

или

 

допуская

 

появление

 

фантомов

Причем

оба

 

способа

 

запуска

 

соответствуют

 

протоколу

 

блокировок

 

по

 

намерению

 

для

 

доступа

 

к

 

данным

.  

14.8. 

Предикатные

 

синхронизационные

 

блокировки

 

Как

 

было

 

показано

 

в

 

предыдущем

 

разделе

метод

 

гранулированных

 

синхронизационных

 

группировок

 

с

 

использованием

 

захватов

 

по

 

намерению

 

решает

 

проблему

 

фантомов

только

 

в

 

случае

если

 

на

 

всю

 

таблицу

 

накладывается

 

блокировка

 

в

 

режиме

 

S

 

или

 

X

Более

 

слабые

 

захваты

 

отношения

 

не

 

обеспечивают

 

ликвидацию

 

проблемы

 

фиктивных

 

элементов

Известно

однако

что

 

проблема

 

элементов

-

фантомов

 

не

 

будет

 

возникать

если

 

перейти

 

от

 

захватов

 

индивидуальных

 

объектов

 

базы

 

данных

 

к

 

захвату

 

условий

  (

предикатов

), 

которым

 

удовлетворяют

 

задействуемые

 

транзакцией

 

объекты

При

 

использовании

 

блокировок

 

на

 

уровне

 

отношений

проблемы

 

фиктивных

 

записей

 

не

 

возникает

 

именно

 

потому

что

 

отношение

 

как

 

логический

 

объект

 

представляет

 

собой

 

неявное

 

условие

 

для

 

входящих

 

в

 

него

 

кортежей

Захват

 

отношения

 

представляет

 

собой

 

простой

 

и

 

частный

 

случай

 

так

 

называемых

 

предикатных

 

блокировок

Поскольку

 

любая

 

операция

 

над

 

реляционной

 

базой

 

данных

 

задается

 

некоторым

 

условием

  (

т

.

е

в

 

ней

 

указывается

 

не

 

конкретный

 

набор

 

объектов

 

базы

 

данных

над

 

которыми

 

нужно

 

выполнить

 

операцию

а

 

условие

которому

 

должны

 

удовлетворять

 

объекты

 

этого

 

набора

), 

то

 

удобным

 

способом

 

было

 

бы

 

S-

 

или

 

X

-

блокирование

 

именно

 

этого

 

условия

Однако

 

при

 

попытке

 

использовать

 

этот

 

метод

 

в

 

реальной

 

СУБД

 

возникает

 

трудность

 

определения

 

совместимости

 

различных

 

условий

Действительно

в

 

языке

 SQL 

допускаются

 

условия

 

с

 

подзапросами

 

и

 

другими

 

сложными

 

предикатами

Поэтому

 

в

 

общем

 

виде

 

эта

 

проблема

 

практически

 

вряд

 

ли

 

разрешима

Совместимость

 

предикатов

 

сравнительно

 

легко

 

определяется

 

для

 

случая

 

простых

 

условий

имеющих

 

вид


background image

 

189

{

Имя

 

атрибута

 {= |<> | > | >= | < | <=} 

Значение

[{

OR

 | 

AND

} { 

Имя

 

атрибута

 {= |

 

<

 

> | > | >= | < | <=} 

Значение

 }.,..] 

Использование

 

предикатных

 

блокировок

 

решает

 

проблему

 

фиктивных

 

элементов

 (

фантомов

), 

т

.

к

второй

 

транзакции

 

не

 

разрешается

 

вставлять

 

новые

 

строки

удовлетворяющие

 

уже

 

заблокированному

 

условию

Для

 

простых

 

условий

 

совместимость

 

предикатных

 

блокировок

 

легко

 

определяется

 

на

 

основе

 

следующей

 

геометрической

 

интерпретации

Пусть

 

R

 

отношение

 

с

 

атрибутами

 

А

1

А

2

, …, 

A

n

, a 

M

1

M

2

, …, 

M

– 

множество

 

допустимых

 

значений

 

этих

 

атрибутов

  (

все

 

эти

 

множества

 

конечны

). 

Тогда

 

можно

 

сопоставить

 

отношению

 

R

 

конечное

 

n

-

мерное

 

пространство

 

возможных

 

значений

 

кортежей

 

отношения

 

R

В

 

этом

 

пространстве

 

любое

 

простое

 

условие

 

(

предикат

) «

вырезает

» 

m

-

мерный

 (

m

<=

n

) «

прямоугольник

». 

Тогда

 

можно

 

утверждать

что

 

S-X

X-S

X-X

 

предикатные

 

блокировки

 

от

 

разных

 

транзакций

 

являются

 

совместимыми

если

 

соответствующие

 

предикатам

 

этих

 

транзакций

 «

прямоугольники

» 

не

 

пересекаются

Можно

 

проиллюстрировать

 

это

 

простым

 

примером

Как

 

видно

 

из

 

рисунка

в

 

каких

 

бы

 

режимах

 

транзакция

 1 

не

 

требовала

 

блокировки

 

условия

 

(1<=

a

<=4)

&

(

b

=4), a 

транзакция

 2  – 

условия

 (1<=

a

<=5)

&

(1<=

b

<=3), 

эти

 

блокировки

 

будут

 

всегда

 

совместимыми

так

 

как

 

захватывают

 

различные

 

множества

 

записей

Пример

: (

n

=2)   

(1<=

5 (1<= <=3)

a<= )&

b

(1<= <=4) ( = )

a

& b

4

1

2

3

4

5

1

2

3

4

a

b

 

Рис

. 14.4. 

Иллюстрация

 

совместимости

 

предикатных

 

блокировок

 (

при

 n=2) 

Предикатные

 

блокировки

 

простых

 

условий

 

описываются

 

таблицами

немногим

 

отличающимися

 

от

 

таблиц

 

традиционных

 

синхронизаторов

 

транзакций


background image

 

190

14.9. 

Метод

 

временных

 

меток

 

Еще

 

один

 

альтернативный

 

метод

 

сериализации

 

транзакций

хорошо

 

работающий

 

в

 

условиях

 

редких

 

конфликтов

 

транзакций

 

и

 

не

 

требующий

 

построения

 

графа

 

ожидания

 

транзакций

 

основан

 

на

 

использовании

 

так

 

называемых

 

временных

 

меток

Основная

 

идея

 

этого

 

метода

 

состоит

 

в

 

следующем

 – 

если

 

транзакция

 

А

 

началась

 

раньше

 

транзакции

 

В

то

 

система

 

обеспечивает

 

такой

 

режим

 

выполнения

как

 

если

 

бы

 

А

 

была

 

целиком

 

выполнена

 

до

 

начала

 

В

Для

 

этого

 

каждой

 

транзакции

 

Т

 

приписывается

 

временная

 

метка

 

t

соответствующая

 

времени

 

начала

 

Т

При

 

выполнении

 

операции

 

над

 

объектом

 

r

 

базы

 

данных

 

транзакция

 

Т

 

помечает

 

его

 

своей

 

временной

 

меткой

 

и

 

типом

 

операции

 (

чтение

 

или

 

изменение

). 

Перед

 

выполнением

 

операции

 

над

 

объектом

 

r

 

транзакция

 

В

 

выполняет

 

следующие

 

действия

 

Смотрит

помечен

 

ли

 

и

 

кем

 

этот

 

объект

 

Проверяет

не

 

закончилась

 

ли

 

транзакция

 

А

пометившая

 

этот

 

объект

Если

 

А

 

закончилось

В

 

помечает

 

объект

 

r

 

своей

 

временной

 

меткой

 

и

 

выполняет

 

операцию

 

Если

 

транзакция

 

А

 

не

 

завершилась

то

 

В

 

проверяет

 

конфликтность

 

операций

Если

 

операции

 

неконфликтны

при

 

объекте

 

r

 

остается

 

или

 

проставляется

 

временная

 

метка

 

с

 

меньшим

 

значением

  (

более

 

ранняя

), 

и

 

транзакция

 

В

 

выполняет

 

свою

 

операцию

 

Если

 

операции

 

А

 

и

 

В

 

конфликтуют

то

 

если

 

t

(

А

)>

t

(

В

) (

т

.

е

транзакция

 

А

 

является

 

более

 «

молодой

», 

чем

 

В

), 

то

 

транзакция

 

А

 

откатывается

 

и

получив

 

новую

 

временную

 

метку

начинается

 

заново

Транзакция

 

В

 

продолжает

 

работу

 

Если

 

же

 

t

(

А

)<

t

(

В

) (

А

 «

старше

» 

В

), 

то

 

транзакция

 

В

 

откатывается

 

и

получив

 

новую

 

временную

 

метку

начинается

 

заново

Транзакция

 

А

 

продолжает

 

работу

В

 

итоге

 

система

 

обеспечивает

 

такую

 

работу

при

 

которой

 

при

 

возникновении

 

конфликтов

 

всегда

 

откатывается

 

более

  «

молодая

» 

транзакция

 

(

начавшаяся

 

позже

). 

Очевидным

 

недостатком

 

метода

 

временных

 

меток

 

является

 

то

что

 

может

 

откатиться

 

более

 «

дорогая

» 

транзакция

начавшаяся

 

позже

 

более

 «

дешевой

». 

К

 

другим

 

недостаткам

 

метода

 

временных

 

меток

 

относятся

 

потенциально

 

более

 

частые

 

откаты

 

транзакций

чем

 

в

 

случае

 

использования

 

блокировок

Это

 

связано

 

с

 

тем

что

 

конфликтность

 

транзакций

 

определяется

 

более

 

грубо

Однако

 

в

 

системах

 

с

 

распределенными

 

базами

 

данных

 

эти

 

недостатки

 

окупаются

 

тем

что

 

при

 

использовании

 

метода

 

временных

 

меток

 

не

 

требуется

 

распознавать

 

тупики

  (

они

 

не

 

возникают

). 

Построение

 

же

 

графа

 

ожидания

 

для