Проблема незафиксированной зависимости.

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

Решение проблем параллелизма

 

Рассмотрим решение проблем параллелизма с помощью механизма блокировок.

 

На

рис. 15.7 приведена измененная версия процесса, показанного на

рис. 15.2, с учетом применения протокола блокировки для чередующихся операций. Операция обновления для транзакции A в момент времени t3 не будет выполнена, поскольку она является неявным запросом с заданием Х-блокировки для кортежа р, а этот запрос вступает в конфликт с S-блокировкой, уже заданной транзакцией B. Таким образом, транзакция A переходит в состояние ожидания. По аналогичным причинам транзакция B переходит в состояние ожидания в момент времени t4.Обновления теперь не утрачиваются, однако возникает новая проблема – бесконечное ожидание или тупиковая ситуация. Способы решения этой проблемы рассматриваются ниже.

Транзакция A Время Транзакция B
Извлечение кортежа р (задание S-блокировки для p) t1
t2 Извлечение кортежа р (задание S-блокировки для p)
Обновление кортежа р (задание X-блокировки для p) t3
Ожидание t4 Обновление кортежа р (задание X-блокировки для p)
Ожидание   Ожидание

 

рис. 15.7. Хотя обновления не утрачиваются, но в момент времени t4 возникает тупиковая ситуация.

 

На

рис. 15.8,

рис. 15.9 приведены в измененном виде примеры, показанные ранее на

рис. 15.3 и

рис. 15.4 соответственно. Они демонстрируют чередующееся выполнение операций согласно описанному выше протоколу блокировки. Операция для транзакции A в момент времени t2 (извлечение на

рис. 15.8 и обновление на

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

 

Транзакция A Время Транзакция B
t1 Обновление кортежа р (задание X-блокировки для p)
Извлечение кортежа р (задание S-блокировки для p) t2
Ожидание t3 Отмена выполнения транзакции (снятие X-блокировки для p)
Итог: Извлечение кортежа р (задание S-блокировки для p) t4  

 

рис. 15.8. Транзакция A предохраняется от выполнения операций с незафиксированным изменением в момент времени t2.

 

Транзакция A Время Транзакция B
t1 Обновление кортежа р (задание X-блокировки для p)
Обновление кортежа р (задание X-блокировки для p) t2
Ожидание t3 Отмена выполнения транзакции (снятие X-блокировки для p)
Итог: Обновление кортежа р (задание X-блокировки для p) t4  

 

рис. 15.9. Транзакция A предохраняется от выполнения операций с незафиксированным изменением в момент времени t2.