2012-05-25 3 views
0

У меня есть приложение, которое подключается к SQL-серверу для запуска некоторых вставок/обновлений. Мы получаем взаимоблокировки, но я заметил, что помимо сообщения о тупике соединение с базой данных отбрасывается, и клиент должен повторно подключиться.Тупик, соединение с базой данных отбрасывается

Это нормально? Даже если это ненормальное поведение, возможно ли, что SQL-сервер не только решает, что мой клиент станет жертвой тупика, но и прекратит соединение?

Есть ли способ остановить падение соединения?

+0

После дальнейшего расследования связь только кажется быть отключены для обновления не запросы, как это может быть? – icecurtain

ответ

1

По определению тупик означает, что два соединения застревают, когда SPID 1 имеет что-то запертое, которое требуется SPID 2, и SPID 2 имеет что-то запертое, которое требуется SPID 1. Ни одна из них не может завершить свою транзакцию, потому что им нужно что-то другое заблокированное. В таких случаях сервер выберет SPID жертвы и убьет его, чтобы другой мог завершить транзакцию.

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

Более подробная информация доступна здесь: http://www.simple-talk.com/sql/learn-sql-server/how-to-track-down-deadlocks-using-sql-server-2005-profiler/

+0

Это помогло информации было хорошо начать некоторые исследования. – icecurtain

Смежные вопросы