Взаимная блокировка

Оценить
(0 голоса)

Взаимная блокировка является особой проблемой одновременной работы с базой данных, при которой две транзакции блокируют выполнение друг друга. Первая транзакция имеет блокировку на некоторый объект базы данных, к которому другая транзакция ожидает доступа, и наоборот. (Обычно несколько транзакций могут вызвать взаимную блокировку, когда они создают циклические зависимости.) В примере 13.5 показана ситуация взаимной блокировки между двумя транзакциями.

 

Взаимная блокировка

 

Если обе транзакции в примере 13.5 будут выполняться в одно и то же время, возникнет взаимная блокировка, и система вернет следующее сообщение:

Server: Msg 1205, Level 13, State 45 Transaction (Process id 56) was deadlocked with another process and has been chosen as deadlock victim. Rerun your command.

Транзакция (процесс с идентификатором 56) находится во взаимной блокировке с другим процессом и выбрана в качестве потерпевшей. Выполните заново вашу команду.

Из этого сообщения примера 13.5 видно, что система базы данных обрабатывает взаимную блокировку, выбрав одну из транзакций в качестве «жертвы», «victim» (фактически ту, которая закрыла цикл в запросах на блокировку), и выполнив ее откат. (Другая транзакция после этого будет выполнена.) Программист может обрабатывать взаимные блокировки, используя условный оператор, который проверяет возвращаемый номер ошибки (1205), а затем заново выполняя отмененную транзакцию.

Вы можете повлиять на то, какая транзакция будет выбрана в качестве «жертвы», используя опцию deadlock_priority в операторе set. Существует 21 уровень приоритетов: значения от -10 до 10. Значение low соответствует -5, значение normal (значение по умолчанию) соответствует 0, a high соответствует 5. «Жертва» сессии выбирается в соответствии с установленными в сессии приоритетами взаимных блокировок.


Уровни изоляции
Проблемы конкурентного доступа
Database Engine и уровни изоляции
READ UNCOMMITTED
READ COMMITTED

Добавить комментарий


Защитный код
Обновить

© 2018 www.serversql.ru. Все права защищены.