SQL Server 2005: взаимоблокировка транзакции

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
7 058
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Ответ принят как подходящий

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

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

разве вы не ответили точно таким же ответом на другой вопрос ?! :-)

Mitch Wheat 15.01.2009 18:09

Это было в сентябре, вы об этом говорите? stackoverflow.com/questions/52566/…

SQLMenace 15.01.2009 18:30

См. Также здесь: Предупреждающие уведомления о взаимоблокировках

Я не хочу показаться отрицательным, но использование событий взаимоблокировки профилировщика - это обычное место для начала в SQL Server 2005, а не флаги трассировки.

Mitch Wheat 15.01.2009 18:12

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

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

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

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

Другие вопросы по теме