Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

15.2. Три проблемы параллельности

Прежде всего следует рассмотреть проблемы, которые обязательно должны устра- няться любым из предлагаемых методов управления параллельностью. При обработке транзакций в общем случае возможны три типа ситуаций, при которых параллельное вы- полнение транзакций, каждая из которых сама по себе является корректной, из-за взаим- ных помех способно привести к неправильному результату. Обратите внимание, что вно- сящая помеху транзакция сама по себе может быть вполне корректной, а неправильный конечный результат возникает из-за бесконтрольного чередования операций двух пра- вильных транзакций. (Выражение "правильная транзакция" здесь означает, что эта тран- закция не нарушает золотое правило, описанное в главе 8.) Ниже приводятся три про- блемы, возникающие при параллельной обработке транзакций.

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

  • Зависимость от незафиксированных результатов

  • Несогласованная обработка данных

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

Рассмотрим ситуацию, показанную на рис. 15.1. Здесь транзакция А считывает неко- торый кортеж t в момент tl, а транзакция В считывает этот же кортеж t в момент t2. Далее транзакция А обновляет кортеж t в момент t3 (исходя из значений, считанных в момент tl), а транзакция В обновляет тот же кортеж t в момент t4 (исходя из значений, считанных в момент t2 и аналогичных значениями, которые были считаны в момент tl). Можно видеть, что результат операции обновления, выполненной транзакцией А, будет утерян, поскольку в момент t4 он будет перезаписан в результате операции обновления, выполняемой транзакцией В.

Замечание. Здесь и далее в этой главе вновь делается допущение, что имеет смысл говорить об "обновлении кортежа".

Проблема зависимости от незафиксированных результатов

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

ния этой транзакции еще не были зафиксированы. Если некоторое обновление не зафик- сировано, всегда существует определенная вероятность, что оно не будет зафиксировано никогда из-за отката данной транзакции. В этом случае первая транзакция будет обраба- тывать данные, которые уже не существуют (и, в сущности, никогда не существовали). Данная ситуация представлена на рис. 15.2 и 15.3.

Транзакция А

Время

Транзакция В

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

1

tl

1

1

t2

1

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

Обновление кортежа t

I

t3 I

1

t4

i

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

Рис. 15.1. Потеря в момент

t4 результатов обновления, выполненного транзакцией А

Транзакция А

Время

Транзакция В

tl

Обновление кортежа t

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

t2

1

1

t3

i

Отмена выполнения транзакции

Рис. 15.2. В момент t2 транзакция А оказывается зависимой от незафиксированных ре- зультатов обновления

Транзакция А

Время

Транзакция В

1

tl

1

Обновление кортежа t

Обновление кортежа t

1

t2

t3

i

Отмена выполнения транзакции

Рис. 15.3. Транзакция А обновляет незафиксированное изменение в момент Ь2, но ре- зультаты этого обновления утрачиваются в момент ЬЗ

В первом примере (см. рис. 15.2) транзакция А в момент t2 получает доступ к неза- фиксированным результатам обновления (иногда называемым незафиксированным из- менением). Затем это обновление в момент t3 отменяется. В результате транзакция А вы- полняется, исходя из ошибочного предположения, что кортеж t имеет значение, которое он имел в момент t2, тогда как на самом деле он сохранил свое прежнее значение, кото- рое имел в момент tl. В итоге в результате выполнения транзакции А будет получен не-

верный результат. Кроме того, следует учитывать, что откат транзакции В может про- изойти не по вине транзакции В, а, например, в результате сбоя системы. (К этому вре- мени выполнение транзакции А может быть уже завершено, а потому сбой системы не приведет к откату транзакции А.)

Второй пример, приведенный на рис. 15.3, иллюстрирует еще более неприятный случай. В момент t2 транзакция А вновь оказывается зависимой от незафиксированно- го изменения. Более того, в момент t3 все ее результаты фактически утрачиваются, поскольку откат транзакции В приводит к восстановлению исходного состояния кор- тежа t, которое он имел в момент tl. Это еще один вариант проблемы потери резуль- татов обновления.

Проблема несогласованной обработки данных

На рис. 15.4 показаны транзакции А и В, которые обрабатывают кортежи, содержа- щие сведения об остатках на счетах (АСС). При этом транзакция А суммирует текущие остатки на счетах, а транзакция В выполняет перевод суммы в $10 со счета 3 на счет 1. Полученный в итоге выполнения транзакции А результат $110, очевидно, неверен, и если он будет помещен в базу данных, то она окажется в противоречивом состоянии'. В таком случае говорят, что транзакция А выполняет несогласованную обработку дан- ных, в результате чего получается противоречивый результат. Обратите внимание на следующее отличие этого примера от предыдущего: здесь не идет речь о зависимости транзакции А от незафиксированных результатов транзакции В, так как последняя вы- полнила и зафиксировала все свои обновления до того, как транзакция А считала зна- чение остатка для счета АСС 3.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]