Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[конспект] Технологии баз данных [v0.8.1].pdf
Скачиваний:
79
Добавлен:
21.03.2016
Размер:
1.3 Mб
Скачать

не совместима с блокировкой объекта c в режиме X в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида R/W.

не совместима с блокировкой объекта c в режиме S или IS в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида W/R при доступе к некоторым объектам , входящим в c.

не совместима с блокировкой объекта c в режиме IX или SIX в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида R/W при доступе к некоторым объектам , входящим в c.

l

Понятие относительной силы блокировок можно описать при помощи диаграммы приоритета (см. рис. 7). Более точная формулировка протокола преднамеренных блокировок для доступа к данным выглядит следующим образом:

1.При задании X-блокировки для сложного объекта неявным образом задается X-блокировка для всех дочерних объектов этого объекта.

2.При задании S- или SIX-блокировки для сложного объекта неявным образом задается S- блокировка для всех дочерних объектов этого объекта.

3.Прежде чем транзакция наложит S- или IS-блокировку на заданный объект, она должна задать IS-блокировку (или более сильную) по крайней мере для одного родительского объекта этого объекта.

4.Прежде чем транзакция наложит X-, IXили SIX-блокировку на заданный объект, она должна задать IX-блокировку (или более сильную) для всех родительских объектов этого объекта.

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

Протокол преднамеренных блокировок не определяет однозначно, какие блокировки должны быть наложены на родительский объект при блокировании дочернего объекта. Например, при намерении задать S-блокировку кортежа отношения, на отношение, включающее этот кортеж, можно наложить любую из блокировок типа IS, S, IX, SIX, X. При намерении задать X-блокировку кортежа, на отношение можно наложить любую из блокировок типа IX, SIX, X.

X

SIX

S IX

IS

Предикатные блокировки

Метод гранулированных синхронизационных захватов (блоки-

ровок) не решает проблему фантомов (если, конечно, не огра-

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

Рис. 7. Диаграмма приоритета преднамеренных блокировок (сверху — более сильные блокировки, снизу — более слабые)

Поскольку любая операция над реляционной базой данных задается некоторым условием, идеальным выбором было бы требовать синхронизационную блокировку в режиме S или X именно этого условия. Но непонятно, как определить совместимость двух предикатных блокировок.

Проблема совместимости сравнительно легко решается для случая простых условий, состоящих из сравнений значений атрубтов (ă : ď; ą; ě; ; ), соединенных конъюнкциями/дизъюнкциями.

Проблема фиктивных элементов (фантомов) легко решается с использованием предикатных блокировок, т. к. вторая транзакция не может вставить новые строки, удовлетворяющие уже заблокированному условию.

66

Заметим, что блокировка всего отношение в каком-либо режиме фактически есть предикатная блокировка, т. к. каждое отношение имеет предикат, определяющий, какие кортежи содержатся в отношении, и блокировка отношения есть блокировка предиката этой таблицы.

Тупиковые ситуации

Ситуация тупика (dead locks) может возникать при наличии не менее двух транзакций, каждая из которых выполняет не менее двух операций, а именно при ожидании транзакциями завершения друг друга. Для двух транзакций в общем случае тупик имеет вид:

Транзакция T1

 

 

 

Время

Транзакция T2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Блокировка

объекта

 

1

t

 

 

 

 

успешна

 

 

 

 

 

 

 

 

 

 

1

Блокировка

объекта

 

 

 

 

 

t

 

2

 

 

 

 

успешна

 

 

 

 

 

 

 

 

2

 

 

 

Блокировка

объекта

 

2

 

 

 

 

 

конфликтует

с блокировкой,

t3

 

 

 

 

наложенной

транзакцией T

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

Блокировка

объекта

 

1

Ожидание...

 

 

 

 

t4

конфликтует с блокировкой,

 

 

 

 

 

 

наложенной

транзакцией T

 

 

 

 

 

 

 

 

 

 

1

Ожидание...

 

 

 

 

ą t4

Ожидание...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Т. к. нормального выхода из тупиковой ситуации нет, то такую ситуацию необходимо распознавать и устранять. Методом разрешения тупиковой ситуации является откат одной из транзакций (называемой транзакцией-жертвой) так, чтобы другие транзакции продолжили свою работу. После разрешения тупика, транзакцию, выбранную в качестве жертвы можно повторить заново.

Определение 10. Граф ожидания транзакций (wait-for graph) — это ориентированный двудольный граф, в котором существует два типа вершин:

вершины, соответствующие транзакциям,

и вершины, соответствующие объектам захвата,

иимеются дуги

от вершины-транзакции к вершине-объекту, если данный объект захвачен указанной транзакцией,

от вершин-объектов к вершине-транзакции, если данный транзакция ожидает указанный объект.

Можно представить два принципиальных подхода к обнаружению тупиковой ситуации и выбору транзакции-жертвы:

1.СУБД не следит за возникновением тупиков. Транзакции сами принимают решение,

быть ли им жертвой. Метод характерен для настольных СУБД (FoxPro и т.п.).

Для транзакций задается время ожидания (или число попыток), в течение которого транзакция пытается установить нужную блокировку. Если за указанное время (или после указанного числа попыток) блокировка не завершается успешно, то транзакция откатывается (или генерируется ошибочная ситуация).

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

2.За возникновением тупиковой ситуации следит сама СУБД, она же принимает решение, ка-

кой транзакцией пожертвовать. Метод характерен для промышленных СУБД (ORACLE, MS SQL Server и т.п.).

67