Re[7]: многопоточность и deadlock в mssql2000
От: DemAS http://demas.me
Дата: 04.05.06 11:38
Оценка:
Здравствуйте, SergPas, Вы писали:

SP>Со всем согласен, блокировка возможна — взаимоблокировка нет.


Ага. А в исходном сообщении, человек как раз и спрашивал про взаимоблокировку, поэтому я и ответил "нет".

SP>У MSSQL при возникновении блокировки (не deadlock) запрос становиться в ожидание в специальную

SP>очередь (размер которой настраивается параметрами сервера), при переполнении очереди происходит эскалация
SP>блокировки со строки до страницы и так до таблицы в целом.

Насколько я помню, тут нет никакой очереди. Если менеджеру блокировки для хранения информации о наложенных блокировках требуется более 40% памяти, то он пытается эскалировать блокировки. В случае, если другие строки таблицы заблокированы другим процессом — эскалация не происходит.

SP>После чего вероятность deadlock возрастает.


Да за счет чего она увеличивается то? Мы по прежнему имеем один ресурс — на этот раз таблицу, за которую происходит борьба. Откуда возьмется deadlock ?

SP>При возникновении deadlock MSSQL выдергивает запрос из очереди и сообщает об этом приложению и так до тех пор пока

SP>не разрулится ситуация.

При возникновении deadlock сервер стоит граф блокировок и выбирает один из процессов, как кандидат на rollback. После чего второй процесс продолжает свое выполнение.

SP>Давно это было, я уже всех тонкостей не помню, перешли на Oracle там таких проблем нет.


Там есть другие проблемы
... << RSDN@Home 1.2.0 alpha rev. 643>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.