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