В общем есть SQL2005, есть тяжёлая транзакция, уровень изоляции READ COMMITED, воспроизвёл дедлок, получил граф(ы).
первый
второй
Как видно из графов, на индексах 2-х таблиц висят S блокировки, и вот это мне абсолютно непонятно ведь уровень изоляции READ COMMITED.
И как бы ещё узнать, каким именно STATEMENT-ом была установлена S юлокировка...
В общем посоветуйте куда копать дальше, что бы победить это дело.
Спасибо!
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Здравствуйте, Tom, Вы писали:
Tom>Как видно из графов, на индексах 2-х таблиц висят S блокировки, и вот это мне абсолютно непонятно ведь уровень изоляции READ COMMITED.
А кто сказал, что при Read Committed S блокировки не ставятся?
Tom>И как бы ещё узнать, каким именно STATEMENT-ом была установлена S юлокировка...
DBCC TRACEON(1204, 3406, -1)
... << RSDN@Home 1.2.0 alpha rev. 0>>
Здравствуйте, IB, Вы писали:
IB>Здравствуйте, Tom, Вы писали:
Tom>>Как видно из графов, на индексах 2-х таблиц висят S блокировки, и вот это мне абсолютно непонятно ведь уровень изоляции READ COMMITED.
IB>А кто сказал, что при Read Committed S блокировки не ставятся?
Поскольку взаимоблокировка произошла из-за того, что транзакции удерживали коллективные блокировки и потом попытались их повысить до эксклюзивных, то, в принципе, помочь избежать неприятностей в данном случае сможет понижение уровня изоляции до READ COMMITED. При этом коллективная блокировка не будет держаться до конца транзакции, а снимется сразу после завершения чтения, а значит, обновить записи ничто не помешает.
Как я понимаю у меня блокировка S после окончания чтения не снимается, я не прав?
Tom>>И как бы ещё узнать, каким именно STATEMENT-ом была установлена S юлокировка...
IB>DBCC TRACEON(1204, 3406, -1)
Правильно ли я понимаю, что я должен выполнить эту команду в Management Studio а потом запустить профайлер?
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Здравствуйте, Tom, Вы писали:
Tom>Как я понимаю у меня блокировка S после окончания чтения не снимается, я не прав?
Нет, она у тебя ставится в тот момент, когда на ресурсе уже есть X блокировка и естественно ничего из этого не получается.
Tom>Правильно ли я понимаю, что я должен выполнить эту команду в Management Studio а потом запустить профайлер?
Нет, выполнить эту команду в Management Studio и ждать дедлока, потом смотреть в лог сиквела.
... << RSDN@Home 1.2.0 alpha rev. 0>>