- •Транзакция
- •Транзакция
- •Транзакция
- •Свойства ACID транзакций
- •Свойства ACID транзакций
- •Журнал Транзакций
- •Ведение журнала транзакций
- •Ведение журнала транзакций
- •Восстановление транзакций
- •Основные термины
- •Проблемы потерянного обновления
- •Потеря в момент времени t4
- •Проблема зависимости от незафиксированного результата
- •Проблема зависимости от незафиксированного результата
- •Транзакция А становится зависимой от незафиксмрованного изменения в момент времени t2
- •Проблема зависимости от незафиксированного результата
- •Транзакция А обновляет незафиксированное изменение в момент времени t2, и результаты этого обновления
- •Проблема анализа несовместимости
- •Матрица совместимости типов
- •Решение проблемы потерянного обновления
- •Транзакция А
- •Решение проблемы зависимости от незафиксированного результата
- •Решение проблемы зависимости от незафиксированного результата
- •Решение проблемы зависимости от незафиксированного результата
- •Решение проблемы анализа несовместимости
- •ТУПИКОВАЯ СИТУАЦИЯ
- •Пример тупиковой ситуации
- •Выход из тупиковой ситуации
Проблемы потерянного обновления
Рассмотрим ситуацию, показанную на рисунке 1. Транзакция А извлекает некоторый кортеж р в момент времени t1. Транзакция В извлекает тот же кортеж в момент времени t2. Затем транзакция А обновляет кортеж p в t3, а В - в t4. Но результат обновления, выполненный транзакцией А, будет утерян, поскольку в момент времени t4 она не будет учтена и потому будет «отменена» операцией обновления, выполненной транзакцией В.
Решение проблем
Потеря в момент времени t4 |
|
Обе |
|||
|
транзакции |
||||
результатов обновления |
|
||||
|
извлекают |
||||
|
|
|
|
один и тот же |
|
Транзакция А |
Время |
Транзакция |
кортеж |
||
|
|||||
- |
| |
- |
|
|
|
Извлечение кортежа р |
t1 |
- |
|
|
|
- |
| |
- |
|
|
|
- |
t2 |
Извлечение |
|
|
|
- |
| |
- |
|
|
|
Обновление кортежа р |
t3 |
- |
|
|
|
- |
| |
- |
|
|
|
- |
t4 |
Обновление кортежа p |
|||
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обновление, выполненное транзакцией А, затерто обновлением, выполненным транзакцией В
Проблема зависимости от незафиксированного результата
Проблема незафиксированной зависимости появляется, если с помощью некоторой транзакции осуществляется извлечение некоторого кортежа, который в данный момент обновляется другой транзакцией, но это обновление еще не закончено. Таким образом, если обновление не завершено, существует некоторая вероятность, что оно не будет завершено никогда.
Решение проблем
Проблема зависимости от незафиксированного результата
Рассмотрим пример, показанный на рисунке 2. Транзакция А в момент времени t2 встречается с незафиксированным обновлением. Затем это обновление отменяется в момент времени t3. Таким образом, транзакция А выполняется на основе фальшивого предположения, что кортеж p имеет некоторое значение в момент времени t2.
В итоге после выполнения транзакции А будет получен неверный результат.
Транзакция А становится зависимой от незафиксмрованного изменения в момент времени t2
Транзакция А |
Время |
Транзакция В |
- |
| |
- |
- |
t1 |
Обновление кортежа p |
- |
| |
- |
Извлечение кортежа p |
t2 |
- |
|
| |
- |
|
t3 |
Отмена выполнения |
|
|
Транзакция |
|
После выполнения |
Транзакция В |
кортеж |
|
отменяет |
|
|
транзакции А будет получен |
выполненное |
|
|
|
неверный результатобновление кортежа р |
|
Проблема зависимости от незафиксированного результата
Рассмотрим пример, показанный на рисунке 3. Здесь не только транзакция А становится зависимой от изменения, незафиксированного в момент времени t2, но также в t3 фактически утрачивается результат обновления, поскольку отмена выполнения транзакции В в момент времени t3 приводит к восстановлению кортежа p к исходному значению.
Транзакция А обновляет незафиксированное изменение в момент времени t2, и результаты этого обновления утрачиваются в момент времени t3
Транзакция А |
Время |
- |
| |
- |
t1 |
- |
| |
Обновление кортежа p |
t2 |
|
| |
|
t3 |
Транзакция А обновляет кортеж p
Транзакция В
-
Обновление кортежа p
-
-
-
Отмена выполнения
Потеря обновления и восстановление кортежа p до исходного значения
Проблема анализа несовместимости
Рассмотрим пример, показанный на рисунке 4. Здесь изображены транзакция А, суммирующая балансы, и транзакция В, которая производит перевод суммы 10 со счета 3 на счет 1. Полученный в итоге транзакции А результат 110 неверен, и если он будет записан в БД, то в ней может возникнуть проблема несовместимости.
Исходные данные: СЧЕТ 1=40, СЧЕТ 2=50, СЧЕТ 3=30,
Транзакция А
-
Извлечение кортежа СЧЕТ 1: Sum=40
-
Извлечение кортежа СЧЕТ 2: Sum=90
-
-
Транзакция А не учитывает изменения суммы на счете 1 и получает неверный результат
Sum=110 (а не 120)
Время |
Транзакция В |
|
| |
- |
|
t1 |
- |
|
| |
- |
|
t2 |
- |
|
t3 |
Извлечение кортежа СЧЕТ 3: |
|
| |
- |
|
t4 |
Обновление кортежа СЧЕТ 3: |
|
30 -> 20 |
||
|
||
| |
- |
|
|
Извлечение кортежа СЧЕТ 1: |
|
|
- |
|
|
Обновление кортежа СЧЕТ 1: |
|
|
40 -> 50 |
|
| |
- |
|
t7 |
Завершение выполнения транзакции |
|
| |
|
|
t8 |
|
Матрица совместимости типов
блокировок.
Т р а н з а к ц и я А
Т
р
а
н
з
а
к
ц
и
я
В
"N" -конфликт (запрос транзакции В не может быть немедленно удовлетворен),
"Y" -совместимость (запрос транзакции В может и должен быть немедленно удовлетворен).
