Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

15.5. Взаимная блокировка

Как было показано выше, механизм блокировки можно использовать для разрешения трех основных проблем, возникающих при параллельной обработке кортежей транзак- циями. К сожалению, использование блокировок приводит к возникновению другой про- блемы— взаимной блокировке транзакций. Выше были приведены два примера по- добных ситуаций. На рис. 15.10 показана обобщенная схема возникновения данной про- блемы, на которой rl и г2 представляют любые блокируемые объекты, необязательно являющиеся кортежами базы данных (подробности приводятся в разделе 15.8), а выра- жения типа "блокировка... без совместного доступа" обозначают любые операции уста- новки блокировки (без совместного доступа), заданные как явно, так и неявно.

Транзакция А

Время

—-

1

1

Блокировка rl без совместного

tl

доступа

1

1

t2

I

i

Блокировка Г 2 без совместного

t3

доступа

J.

Ожидание

i

Ожидание

t4

Ожидание

i

Ожидание

i

Ожидание

i

Транзакция В

Блокировка r2 без совместного доступа

Блокировка rl без совместного

доступа

Ожидание

Ожидание

Рис. 15.10. Схема возникновения взаимной блокировки

Взаимная блокировка имеет место в том случае, когда две или более транзакций од- новременно находятся в состоянии ожидания, причем для продолжения работы каждая из них ожидает прекращения выполнения другой транзакции3. На рис. 15.10 показана взаимная блокировка для двух транзакций, однако, в принципе, возможны ситуации вза- имной блокировки с участием трех, четырех и более транзакций. Тем не менее прове- денные с системой System R эксперименты показали, что на практике ситуации взаимной блокировки с участием более двух транзакций почти никогда не встречаются [15.4].

3Иногда в литературе ситуация взаимной блокировки упоминается под названием "тупико- вая ситуация ".

Желательно, чтобы при возникновении взаимной блокировки система могла обнару- жить ее и найти из нее выход. Для обнаружения ситуации взаимной блокировки следует организовать поиск замкнутых петель в графе ожидания (т.е. в графе, представляющем транзакции, которые ожидают окончания выполнения других транзакций; см. упр. 15.4). Устранение взаимной блокировки заключается в выборе одной из участвующих ''в ней транзакций (т.е. той, которая входит в состав петли на графе ожидания) в качестве жерт- вы и ее откате. В результате будут сняты все установленные ею блокировки и выполне- ние других транзакций можно будет продолжить.

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

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

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]