Тупики (DeadLock)

Если приоритет второй транзакции мал, то она ждать будет долго.

Минусы блокировок.

Совместимость блокировок.

  запись объекта Чтение объекта запись части объекта чтение части объекта чтение/запись части объекта
запись объекта нет Нет нет нет Нет
чтение объекта нет Да нет да Нет
запись части объекта нет Нет да да Да
чтение части объекта нет Да нет да Да
чтение/запись части объекта нет Нет нет да Нет
Транзакция1 Транзакция2 Транзакция3
LOCK A ... ... UNLOCK A ... LOCK A ... ... ... LOCK A ... ... ... LOCK A ... UNLOCK A

Решения:

1. Динамические приоритеты (чем дольше ждет, тем выше приоритет)

2. Ранжирование очередей (несколько очередей, в каждой транзакции одного приоритета. очереди обходятся по-порядку, из них по очереди достаются транзакции.

Транзакция1 Транзакция2
LOCK A ... LOCK B ... ... LOCK B ... LOCK A ... ...

Дойдя до этого места, транзакции войдут в тупик, ожидая друг друга.

Способы обнаружения тупиков:

1. Контроль времени ожидания

2. Построение графа ожиданий.

 
 


При обнаружении подобной структуры выбирается транзакция с наименьшим приоритетом и она снимается.

Способы предупреждения тупиков:

1. упорядочить ресурсы БД и захватывать их в заданном порядке.

2. захватывать в транзакции сразу все объекты.

Двухфазный протокол:

Все операции LOCK должны предшествовать операциям UNLOCK.

Транзакция1 Транзакция2
LOCK A LOCK B ….. LOCK C ….. UNLOCK A ….. LOCK C ….. UNLOCK C …… …… LOCK A UNLOCK A

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: