ВВЕДЕНИЕ В СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ


Механизм выделения версий данных - часть 2


Найдя такую запись, транзакция A использует старый вариант данных страницы.

Рассмотрим, как решается проблема несовместного анализа с использованием механизма выделения версий.

Длинная транзакция выполняет некоторый анализ по всей таблице, например, подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера. Пусть на всех счетах находятся одинаковые суммы, например, по $100. Короткая транзакция в этот момент выполняет перевод $50 с одного счета на другой так, что общая сумма по всем счетам не меняется.

Транзакция A

Время

Транзакция B

Сумма на счетах посчитана правильно.

Проверка SCN счета
- SCN транзакции больше SCN счета.

Чтение счета

без наложения блокировки и суммирование.

---
---
X-блокировка счета
- успешна
---
Снятие денег со счета
.

---
X-блокировка счета
- успешна
---
Помещение денег на счет
.

---
Фиксация транзакции

(Снятие блокировок)

Проверка SCN счета
- SCN транзакции больше SCN счета.

Чтение счета

без наложения блокировка и суммирование.

---
Проверка SCN счета
- SCN транзакции МЕНЬШЕ SCN счета.

Чтение старого варианта счета

и суммирование.

---
Фиксация транзакции
---
 

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




Начало  Назад  Вперед



Книжный магазин