|
Программирование >> Хронологические базы данных
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 (установка Х-блокировки для t) Окончание или отмена выполнения (отмена Х-блокировки для t) Рис. 15.7. Транзакция А не может получить доступ к незафиксированным результатам изменения кортежа t в мо.мент t2
Транзакция В Обновление кортежа 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 возникает другая проблема - взаимная блокировка
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |