ВВЕДЕНИЕ В СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ



Преднамеренные блокировки - часть 4


По таблице совместимости блокировок определяем, что транзакция A должна наложить на таблицу S, или SIX, или X-блокировку. (Блокировки IS недостаточно, т.к. эта блокировка позволяет транзакции B наложить IX-блокировку для последующей вставки строк).

Транзакция A

Время

Транзакция B

Транзакция A дважды читает один и тот же набор строк

Все правильно

S-блокировка таблицы (с целью потом блокировать строки) - успешна
---
S-блокировка строк, удовлетворяющих условию
.

(Заблокировано n строк)

---
Выборка строк, удовлетворяющих условию
.

(Отобрано n строк)

---
---
IX-блокировка таблицы (с целью потом вставлять строки) - отвергается из-за конфликта с S-блокировкой, наложенной транзакцией A
---
Ожидание…
---
Ожидание…
S-блокировка строк, удовлетворяющих условию
.

(Заблокировано n строк)

Ожидание…
Выборка строк, удовлетворяющих условию
.

(Отобрано n строк)

Ожидание…
Фиксация транзакции - блокировки снимаются
Ожидание…
---
IX-блокировка таблицы (с целью потом вставлять строки) - успешна
---
Вставка новой строки, удовлетворяющей условию
.
---
Фиксация транзакции
   

Результат. Проблема фиктивных элементов (фантомов) решается, если транзакция A использует преднамеренную S-блокировку или более сильную.

Замечание. Т.к. транзакция A собирается только читать строки таблицы, то минимально необходимым условием в соответствии с протоколом преднамеренных блокировок является преднамеренная IS-блокировка таблицы. Однако этот тип блокировки не предотвращает появление фантомов. Таким образом, транзакцию A можно запускать с разными уровнями изолированности - предотвращая или допуская появление фантомов. Причем, оба способа запуска соответствуют протоколу преднамеренных блокировок для доступа к данным.




Содержание  Назад  Вперед