Re[6]: многопоточность и deadlock в mssql2000
От: SergPas Украина  
Дата: 04.05.06 11:14
Оценка:
Здравствуйте, 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 — там все гораздо подробнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.