Введение в системы управления базами данных

         

с целью потом блокировать строки)



Таблица 14

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

Транзакция A дважды читает один и тот же набор строк
Все правильно
S-блокировка таблицы ( с целью потом блокировать строки) - успешна ---
S-блокировка строк, удовлетворяющих условию
(Заблокировано n строк)
---
Выборка строк, удовлетворяющих условию
(Отобрано n строк)
---
--- IX-блокировка таблицы (с целью потом вставлять строки) - отвергается из-за конфликта с S-блокировкой, наложенной транзакцией A
--- Ожидание…
--- Ожидание…
S-блокировка строк, удовлетворяющих условию
(Заблокировано n строк)
Ожидание…
Выборка строк, удовлетворяющих условию
(Отобрано n строк)
Ожидание…
Фиксация транзакции - блокировки снимаются Ожидание…
--- IX-блокировка таблицы (с целью потом вставлять строки) - успешна
--- Вставка новой строки, удовлетворяющей условию
--- Фиксация транзакции
   
Результат. Проблема фиктивных элементов (фантомов) решается, если транзакция A использует преднамеренную S-блокировку или более сильную. Замечание. Т.к. транзакция A собирается только читать строки таблицы, то минимально необходимым условием в соответствии с протоколом преднамеренных блокировок является преднамеренная IS-блокировка таблицы. Однако этот тип блокировки не предотвращает появление фантомов. Таким образом, транзакцию A можно запускать с разными уровнями изолированности - предотвращая или допуская появление фантомов. Причем, оба способа запуска соответствуют протоколу преднамеренных блокировок для доступа к данным.

Содержание раздела