Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных / Лекции / PROBLEMY_PARALLELIZMA.ppt
Скачиваний:
20
Добавлен:
03.01.2020
Размер:
5.47 Mб
Скачать

Решение проблемы потерянного обновления

Решение проблемы заключается в применении протокола блокировки для чередующихся операций (рисунок 5). Операция обновления для транзакции А в момент времени t3 не будет выполнена, поскольку она является неявным запросом с заданием X- блокировки для кортежа p, а этот запрос вступает в конфликт с S- блокировкой, уже заданной транзакцией B. Таким образом, транзакция А переходит в состояние ожидания. По аналогичным причинам транзакция В переходит в состояние ожидания. В таком случае результаты любых обновлений не будут утрачены, решение этой проблемы с помощью блокировки возможно только при решении другой проблемы (тупиковая ситуация).

Транзакция А

-

Извлечение кортежа р (Задание S-блокировки для р)

-

Обновление не выполнено, т.к. для кортежа р задана S- блокировка

(Задание X-блокировки для р) Ожидание

Ожидание

Ожидание

Время

Транзакция В

|

-

t1

-

|

-

t2

Извлечение кортежа р

(Задание S-блокировки для р)

 

 

|

Обновление не

 

 

t3

выполнено, т.к. для

 

 

кортежа р задана X-

|

блокировка

t4

Обновление кортежа p

(Задание X-блокировки для р)

 

 

 

 

Ожидание

 

 

 

 

 

 

Возникновение тупиковой

 

 

ситуации

Решение проблемы зависимости от незафиксированного результата

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

Решение проблемы зависимости от незафиксированного результата

Транзакция А

Извлечение не выполнено, т.к.

задана Х- блокировка

Извлечение кортежа p (Задание S-блокировки для р)

Ожидание

Ожидание

Извлечение кортежа p (Задание S-блокировки для р)

-

Время

|

t1

|

t2

|

t3

Транзакция В

-

Обновление кортежа p

(Задание X-блокировки для

р)

-

-

-

Отмена выполнения (Снятие X-блокировки)

После снятия блокировки происходит возобновление транзакции

Решение проблемы зависимости от незафиксированного результата

Транзакция А

-

Обновление не выполнено, т.к.

задана Х- блокировка

(Задание X-блокировки для р) Ожидание

Ожидание

Обновление кортежа p (Задание X-блокировки для р)

-

Время

|

t1

|

t2

|

t3

Транзакция В

-

Обновление кортежа p

(Задание X-блокировки для

р)

-

-

-

Отмена выполнения (Снятие X-блокировки)

После снятия блокировки происходит возобновление транзакции

Решение проблемы анализа несовместимости

Решение данной проблемы заключается в применении

чередования транзакций согласно протоколу блокировки. Операция обновления в момент времени t6 не будет выполнена и переходит в состояние ожидания. Точно так же операция для транзакции А в момент времени t7 не будет выполнена и переходит в состояние ожидания.

Блокировка хотя и помогает решить одну проблему, но приводит к необходимости решения другой – тупиковой ситуации.

Исходные данные: СЧЕТ 1=40, СЧЕТ 2=50, СЧЕТ 3=30,

Транзакция А

Извлечение кортежа СЧЕТ 1: (Задание S-блокировки для р)

Sum=40

Извлечение кортежа СЧЕТ 2: (Задание S-блокировки для р)

Sum=90

-

-

-

-

Извлечение кортежа СЧЕТ 3: Sum=110 (а не 120)

Время

t1

t2

t3

t4

t5

t6

t7

Транзакция В

-

-

Извлечение кортежа СЧЕТ 3: (Задание S-блокировки для р)

Обновление кортежа СЧЕТ 3: (Задание X-блокировки для р)

30 -> 20

Извлечение кортежа СЧЕТ 1: (Задание S-блокировки для р)

Обновление кортежа СЧЕТ 1: (Задание X-блокировки для р)

ожидание

ожидание

Возникновение тупиковой ситуации

ТУПИКОВАЯ СИТУАЦИЯ

Тупиковая ситуация возникает при использовании блокировки, т.е.

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

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

Пример тупиковой ситуации

Транзакция А

-

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

Транзакция А ожидает снятие блокировки с р2

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

Ожидание

Ожидание

Ожидание

Время

Транзакция В

|

-

t1

-

|

-

t2

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

|

-

 

Транзакция В

t3

ожидает снятия

|

блокировки с р1

t4

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

|

Ожидание

Выход из тупиковой ситуации

Тупиковая ситуация

Выход из тупиковой ситуации

Для обнаружения тупиковой ситуации следует обнаружить цикл в

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

Существует два подхода:

Автоматический перезапуск транзакций с самого начала при условии, что обстоятельства, которые привели к тупиковой ситуации, не повторятся вновь.

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

Соседние файлы в папке Лекции