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

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

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

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

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

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

- 4 -

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

  • 4 -

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

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

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

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

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

Ожидание 4 Ожидание

Ожидание 4 Ожидание

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

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

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

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

Транзакция А

Время

Транзакция В

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

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

Ожидание

Ожидание

Ожидание

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

I

tl

I

i

t2

4-

1

t3

4

t4

1

t

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

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

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

Транзакция А

Время

Транзакция В

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

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

Ожидание

Ожидание

Ожидание

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

I

I

tl

I

i

t2

i

1

t3

i

и

i I

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

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

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

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

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

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

АСС 1 40

АСС 2

50

АСС 3 30

Транзакция А

Время

Транзакция В

для

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

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

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

I I

и

I

I

I

I

t2

i

i

i

i

t3

i

i

I

t4

i

I

I

I

t5

i

I

1

t6

I

i

i

tl

i

i

I

i

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

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

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

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

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

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

Ожидание

Ожидание

Ожидание

Ожидание

Ожидание

Ожидание

Рис. J5.9. Проблема несогласованной обработки данных устраняется, но в момент tl возникает другая проблема — взаимная блокировка

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