Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными (пособие).pdf
Скачиваний:
280
Добавлен:
21.05.2015
Размер:
5.42 Mб
Скачать

14. Транзакции и параллелизм

14.1.Проблемы, возникающие при параллельном выполнении транзакций

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

Имеются три основные проблемы параллелизма:

1)проблема потери результатов обновления;

2)проблема незафиксированной зависимости (чтение «грязных данных», неаккуратное считывание);

3)проблема несовместимого анализа.

Последняя проблема несовместимого анализа включает в себя еще три следующих варианта:

4)неповторяемое считывание;

5)фиктивные элементы (фантомы);

6)собственно несовместимый анализ. Рассмотрим, в чем эти проблемы состоят.

Проблема потери результатов обновления

Две транзакции по очереди записывают некоторые данные в один и тот же кортеж и затем фиксируют эти изменения.

Транзакция А

Время

Транзакция В

 

 

 

Чтение кортежа Р

---

t1

---

Чтение кортежа Р

t 2

Запись значения Р1 в кортеж Р

---

t 3

---

Запись значения Р2 в кортеж Р

t 4

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

---

t 5

---

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

t 6

Результат:

 

 

 

Потеря результатов обновления

 

 

166

Результат.

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

Проблема незафиксированной зависимости (чтение «грязных данных», неаккуратное считывание)

Транзакция В изменяет данные в кортеже Р. После этого транзакция А читает измененные данные и работает с ними. Транзакция В откатывается и восстанавливает старые данные.

Транзакция А

Время

Транзакция В

 

 

 

---

Чтение значения Р0 из кортежа Р

t1

---

Запись значения Р1 в кортеж Р

t 2

Чтение значения Р1 из кортежа Р

---

t 3

Работа с прочитанными данными Р1

---

t 4

---

Откат транзакции (восстановление

t 5

 

значения Р0 кортежа Р)

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

t 6

---

Результат:

 

 

 

Работа с «грязными» данными

 

 

Спрашивается: «С какими же данными работала транзакция А

Результат.

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

167

Проблемы несовместимого анализа

Проблема несовместимо анализа включает в себя несколько различных вариантов:

1)неповторяемое считывание;

2)фиктивные элементы (фантомы);

3)собственно несовместимый анализ.

Несовместимый анализ – неповторяемое считывание

Транзакция А дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция В, которая изменяет значения в строке.

Транзакция А

Время

Транзакция В

 

 

 

Чтение из кортежа P значения Р0

---

t1

---

Чтение из кортежа P значения Р0

t 2

---

Запись в кортеж P значения Р1

t 3

---

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

t 4

Повторное чтение кортежа P

---

t 5

(уже значения Р1)

 

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

t 6

---

Результат:

 

 

 

Неповторяемое считывание

 

 

Транзакция А ничего не знает о существовании транзакции В, и, так как сама она не меняет значение в данном кортеже, то, очевидно, ожидает, что после повторного чтения значение будет тем же самым, то есть Р0.

Результат.

Транзакция А работает с данными, которые, с ее точки зрения,

самопроизвольно изменяются.

168

Несовместимый анализ – фиктивные элементы (фантомы)

Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций, а именно, чтение нескольких кортежей, удовлетворяющих некоторому условию.

Транзакция А дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция В, которая добавляет новую строку, удовлетворяющую условию отбора.

Транзакция А

Время

Транзакция В

 

 

 

Выборка кортежей, удовлетворяющих

---

t1

условию а. (Отобрано n строк)

Вставка нового кортежа,

---

t 2

 

удовлетворяющего условию а

---

t 3

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

Выборка кортежей, удовлетворяющих

---

t 4

условию а. (Отобрано уже n+1 строк)

 

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

t 5

---

 

 

Результат:

Появился кортеж, которого раньше не было

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

Результат.

Транзакция А в двух последовательных одинаковых выборках строк вопреки очевидным ожиданиям получала разные результаты. При повторной выборке появился дополнительный (n+1)-й кортеж – кортеж-фантом.

Собственно несовместимый анализ

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

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