Здравствуйте, DemAS, Вы писали:
DAS>Здравствуйте, SergPas, Вы писали:
DAS> Допустим у нас есть два ресурса А и Б, и два процесса 1 и 2.
DAS> 1) Процесс 1 блокирует ресурс А
DAS> 2) Процесс 2 блокирует ресурс Б
DAS> 3) Процесс 1 хочет заблокировать ресурс Б, но не может и ожидает процесс 2
DAS> 4) Процесс 2 хочет заблокировать ресурс А, но не может и ожидает процесс 1
DAS> Классическая взаимоблокировка.
DAS> Как вообще может возникнуть deadlock при работе с одним (и только одним) ресурсом ?
Со всем согласен, блокировка возможна — взаимоблокировка нет.
Но в конкретном случае сложно заранее определить из-за какого ресурса возникает "проблема".
У MSSQL при возникновении блокировки (не deadlock) запрос становиться в ожидание в специальную
очередь (размер которой настраивается параметрами сервера), при переполнении очереди происходит эскалация
блокировки со строки до страницы и так до таблицы в целом. После чего вероятность deadlock возрастает.
При возникновении deadlock MSSQL выдергивает запрос из очереди и сообщает об этом приложению и так до тех пор пока
не разрулится ситуация.
Давно это было, я уже всех тонкостей не помню, перешли на Oracle там таких проблем нет.
А за подробностями лучше обратиться на
www.sql.ru — там все гораздо подробнее.