Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_Infa.doc
Скачиваний:
170
Добавлен:
20.03.2016
Размер:
2.75 Mб
Скачать

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

На рис.6. показаны транзакции А и В, которые выполняются для кортежей со счетами. При этом транзакция А суммирует балансы, транзакция В производит перевод суммы 10 со счета 3 на счет 1. полученный в итоге транзакции А результат 110, очевидно, неверен, и если он будет записан в базе данных, то в ней может возникнуть проблема несовместимость. В таком случае говорят, что транзакция А встретилась с несовместимым состоянием и на его основе был выполнен несовместимый анализ.

Счет 1 – 40, Счет2 – 50, Счет3 - 30

Транзакция А

Время

Транзакция В

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

Sum=40

t1

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

Sum=90

t2

t3

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

t4

Обновление кортежа Счет 3

30 20

t5

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

t6

Обновление кортежа Счет 1

40 50

t7

Завершение транзакции

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

Sum = 110 ( а не 120)

t8

Рис.10.6. Транзакция А выполнила несовместимый анализ

10.5. Блокировка

Описанные выше проблемы могут быть разрешены с помощью методики управления параллельным выполнением процессов под названием блокировка. Ее основная идея проста: в случае, когда для выполнения некоторой транзакции необходимо чтобы некоторый объект (обычно это кортеж базы данных) не изменялся непредсказуемо и без ведома этой транзакции, такой объект блокируется.

Более подробно функционирование блокировки заключается в следующем:

  1. Прежде всего, предположим, что в системе поддерживается два типа блокировок: блокировка без взаимного доступа (монопольная блокировка), называемая X-блокировкой, и блокировка с взаимным доступом, называемая S-блокировкой.

  2. Если транзакция А блокирует кортеж р без возможности взаимного доступа (X-блокировка), то запрос другой транзакции В с блокировкой этого кортежа р будет отменен.

  3. Если транзакция А блокирует кортеж р с возможностью взаимного доступа (S-блокировка), то

  • запрос со стороны некоторой транзакции В на X-блокировку кортежа будет отвергнут;

  • запрос со стороны некоторой транзакции В на S-блокировку кортежа будет принят (т.е. транзакция В также будет блокировать кортеж р с помощью S-блокировки).

Теперь следует ввести протокол доступа к данным, который на основе X и S-блокировок позволяет избежать возникновения проблем параллелизма, описанных выше.

  1. Транзакция, предназначенная для извлечения кортежа, прежде всего должна наложить S-блокировку на этот кортеж.

  2. Транзакция, предназначенная для обновления кортежа, прежде всего должна наложить X-блокировку на этот кортеж. Иначе говоря, если, например, для последовательности действий типа извлечение/обновление для кортежа уже задана S-блокировка, то ее необходимо заменить X-блокировкой.

  3. Если запрашиваемая блокировка со стороны транзакции В отвергается из-за конфликта с некоторой другой блокировкой со стороны транзакции А, то транзакция В переходит в состояние ожидания. Причем транзакция В будет находится в состоянии ожидания до тех пор, пока не будет снята блокировка, заданная транзакцией А.

  4. X-блокировки сохраняются вплоть до конца выполнения транзакции (до операции «завершение выполнения»). S –блокировки также обычно сохраняются вплоть до этого момента.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]