Программирование >>  Хронологические базы данных 

1 ... 178 179 180 [ 181 ] 182 183 184 ... 348


15.4. Устранение трех проблем параллельности

Теперь можно вновь вернуться к рассмотрению трех проблем параллельности, описанных в разделе 15.2, и проанализировать, как они решаются с помощью механизма блокировок, предложенного в предыдущем разделе.

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

На рис. 15.6 приведена новая версия процесса, представленного на рис. 15.1, которая изменена в соответствии с требованиями протокола блокировки, описанного в разделе 15.3. Операция обновления для тратакции А в момент t3 не будет выполнена, поскольку она является неявным запросом на установку Х-блокировки для кортежа t. Однако этот запрос вступает в конфликт с S-блокировкой, уже установленной для данного кортежа транзакцией В. В результате транзакция А будет переведена в состояние ожидания. По аналогичным причинам транзакция В будет переведена в состояние ожидания в момент t4. Хотя в этом случае результаты обоих обновлений утрачены не будут, решение данной проблемы с помощью механизма блокировки окажется возможным только при решении другой, вновь возникшей проблемы. Эта новая проблема называется взаимной блокировкой и обсуждается в разделе 15.5.

Транзакция А Время Транзакция В

- i -

- i -Извлечение кортежа t tl - (установка S-блокировки для t) -1 -

- i -

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

- i (установка S-блокировки для t)

- i -Обновление кортежа t t3 - (запрос Х-блокировки для кортежа t) i - Ожидание i -

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

Ожидание i (запрос Х-блокировки для кортежа t)

Ожидание i Ожидание

Ожидание i Ожидание

Рис. 15.6. Хотя обновления не утрачиваются, в момент Ь4 возникает взаимная блокировка

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

На рис. 15.7 и 15.8 приведены измененные версии примеров, представленных на рис. 15.2 и 15.3 соответственно. Они демонстрируют чередование выполнения операций транзакций согласно описанному выше протоколу блокировки. Операция транзакции А в момент t2 (извлечение на рис. 15.7 и обновление на рис. 15.8) выполнена не будет. Суть в том, что она сопровождается выдачей неявного запроса на блокировку кортежа t и этот запрос вступает в конфликт с Х-блокировкой, уже установленной для данного кортежа транзакцией В. В результате транзакция А будет переведена в состояние ожидания, продолжающееся до тех пор, пока выполнение транзакции В не будет закончено (до фиксации или отката транзакции В). При этом установленная транзакцией В блокировка будет



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

Транзакция А

Время

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

(установка S-блокировки для t)

Ожидание

Ожидание

Ожидание

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

(установка S-блокировки для t)

Транзакция В

Обновление кортежа t (установка Х-блокировки для t)

Окончание или отмена выполнения (отмена Х-блокировки для t)

Рис. 15.7. Транзакция А не может получить доступ к незафиксированным результатам изменения кортежа t в мо.мент t2

Транзакция А

Время

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

(установка Х-блокировки для t)

Ожидание

Ожидание

Ожидание

Итог: обновление кортежа t

(установка Х-блокировки для t)

Транзакция В

Обновление кортежа t (установка Х-блокировки для t)

Окончание или отмена выполнения (отмена Х-блокировки для t)

Рис. 15.8. Транзакция А не может обновить незафиксированный результат изменения кортежа t в .мо.мент Ь2

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

На рис. 15.9 приведена измененная версия примера, представленного на рис. 15.4. В новой версии чередование операций транзакций осуществляется в соответствии с протоколом блокировки, описанным в разделе 15.3. Операция обновления транзакции В в момент t6 выполнена не будет. Причина в том, что она предусматривает неявный запрос на установку X-блокировки для кортежа АСС 1, который вступает в конфликт с S-блокировкой этого кортежа, уже установленной транзакцией А. В результате транзакция В переводится в состояние ожида-



ния. Аналогично этому операция выборки транзакции А в момент t7 также выполнена не будет. Суть в том, что она сопровождается выдачей неявного запроса на установку S-блокировки для кортежа АСС 3, а этот запрос вступает в конфликт с Х-блокировкой, уже установленной для данного кортежа транзакцией В. В результате транзакция А также переводится в состояние ожидания. Можно сделать вывод, что хотя механизм блокировки и помогает решить исходную проблему (а именно - проблему несогласованной обработки данных), одновременно он приводит к возникновению другой проблемы (а именно - проблемы взаимной блокировки, которая обсуждается в следующем разделе).

АСС 1 40

Транзакция А

Извлечение кортежа АСС 1: (установка S-блокировки для кортежа АСС 1) sum = 40

Извлечение кортежа АСС 2: (установка S-блокировки для кортежа АСС 2) sum = 90

Извлечение кортежа АСС 3: (установка S-блокировки для кортежа АСС 3) Ожидание Ожидание

АСС 2 50

Время

i t5

i i i

ACC 3 30

Транзакция В

Извлечение кортежа АСС 3: (установка S-блокировки для кортежа АСС 3)

Обновление кортежа АСС 3: (установка Х-блокировки для кортежа АСС 3) 30 20

Извлечение кортежа АСС 1: (установка S-блокировки для кортежа АСС 1)

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

(установка Х-блокировки для

кортежа АСС 1)

Ожидание

Ожидание

Ожидание

Ожидание

Ожидание

Ожидание

Рис. 15.9. Проблема несогласованной обработки данных устраняется, но в .мо.мент Ь7 возникает другая проблема - взаимная блокировка



1 ... 178 179 180 [ 181 ] 182 183 184 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика