SQL Server 2005: тупик транзакции - PullRequest
8 голосов
/ 15 января 2009

Я получаю эту ошибку очень часто, но не всегда на 2 страницах в приложении, которое находится в производственной среде. У меня просто несколько скриншотов с ошибкой ниже.

Транзакция (идентификатор процесса XX) заблокирована при блокировке | ресурсы буфера связи с другим процессом и были выбраны в качестве жертвы тупика. Перезапустите транзакцию.

Каким должен быть подход для устранения этой ошибки. Сервер БД - это SQL Server 2005.

Ответы [ 5 ]

5 голосов
/ 15 января 2009

Вот библия по устранению тупиковой ситуации:

http://blogs.msdn.com/bartd/archive/2006/09/09/Deadlock-Troubleshooting_2C00_-Part-1.aspx

3 голосов
/ 15 января 2009
3 голосов
/ 15 января 2009

Эта статья Брэда МакГи - хорошее место для начала.

2 голосов
/ 15 января 2009

Вам необходимо запустить трассировку профиля тупиковой ситуации во время возникновения ошибок. Статья Брэда МакГи - обзор. Вам необходимо определить два оскорбительных процесса. После этого просмотрите код на двух страницах, чтобы узнать, какие команды SQL выполняются и как часто. В большинстве случаев я обнаружил, что простой просмотр кода SQL, который выполняется, и знание того, как часто он выполняется, быстро идентифицирует конфликт. Исправление иногда занимает больше времени ...

1 голос
/ 15 января 2009

Вы можете сделать, как подсказывает сообщение об ошибке, и заставить программу повторить транзакцию!

Очень сильно зависит от того, насколько «атомной» является транзакция! Т.е. если вы зашли в тупик, то похоже, что какой-то другой процесс успешно обновил интересующую вас строку. Имеет ли смысл применять обновление к строке в этих обстоятельствах?

По крайней мере, представьте пользователю более приятное сообщение об ошибке («Другой пользователь изменил xxxx, который вы пытались обновить. Пожалуйста, просмотрите новые значения и попробуйте снова.)

...