- •Транзакция
- •Транзакция
- •Транзакция
- •Свойства ACID транзакций
- •Свойства ACID транзакций
- •Журнал Транзакций
- •Ведение журнала транзакций
- •Ведение журнала транзакций
- •Восстановление транзакций
- •Основные термины
- •Проблемы потерянного обновления
- •Потеря в момент времени t4
- •Проблема зависимости от незафиксированного результата
- •Проблема зависимости от незафиксированного результата
- •Транзакция А становится зависимой от незафиксмрованного изменения в момент времени t2
- •Проблема зависимости от незафиксированного результата
- •Транзакция А обновляет незафиксированное изменение в момент времени t2, и результаты этого обновления
- •Проблема анализа несовместимости
- •Матрица совместимости типов
- •Решение проблемы потерянного обновления
- •Транзакция А
- •Решение проблемы зависимости от незафиксированного результата
- •Решение проблемы зависимости от незафиксированного результата
- •Решение проблемы зависимости от незафиксированного результата
- •Решение проблемы анализа несовместимости
- •ТУПИКОВАЯ СИТУАЦИЯ
- •Пример тупиковой ситуации
- •Выход из тупиковой ситуации
Решение проблемы потерянного обновления
Решение проблемы заключается в применении протокола блокировки для чередующихся операций (рисунок 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 без взаимного доступа |
| |
Ожидание |
Выход из тупиковой ситуации |
Тупиковая ситуация |
Выход из тупиковой ситуации
Для обнаружения тупиковой ситуации следует обнаружить цикл в
диаграмме состояний ожидания. Поиск выхода из тупиковой ситуации состоит в выборе одной из заблокированных транзакций в качестве жертвы и отмене ее выполнения. Таким образом, с нее снимается блокировка, а выполнение другой транзакции может быть возобновлено.
Существует два подхода:
–Автоматический перезапуск транзакций с самого начала при условии, что обстоятельства, которые привели к тупиковой ситуации, не повторятся вновь.
–В программу, связанную с данной транзакцией, посылается сообщение о «вызвавшей тупиковую ситуацию транзакции-жертвы» для обработки этой ситуации в самой программе.
