Консольная программа в производстве заблокирована - PullRequest
0 голосов
/ 21 декабря 2011

У меня на рабочем сервере есть программа, которая вернула эту ошибку:

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

  2. Также, каков наилучший способ отладки этого типа тупиковой ошибки и это вызвано нехваткой ресурсов на сервере?

Транзакция (ID процесса 73) заблокирована для потока | связь ресурсы буфера с другим процессом и был выбран в качестве жертва тупика. Перезапустите транзакцию. : в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, Boolean breakConnection)

в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, Boolean breakConnection)

в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj)

at System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)

в System.Data.SqlClient.SqlDataReader.HasMoreRows ()

at System.Data.SqlClient.SqlDataReader.ReadInternal (Boolean SetTimeout)

в System.Data.SqlClient.SqlDataReader.Read ()

в Microsoft.Data.Extensions.Materializer`1.d__a.MoveNext ()

в Microsoft.Data.Extensions.Materializer`1.d__0.MoveNext ()

в System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext ()

в System.Collections.Generic.List 1..ctor(IEnumerable 1 сбор)

в System.Linq.Enumerable.ToList [TSource] (источник IEnumerable`1)

в Console.Export.DataProvider.ExportData (IEnumerable`1 деятельностьПарам) в D: \ Документы и Settings \ USER \ Desktop \ 11_16_2011 \ ЕЕ \ Console \ Export \ DataProvider.cs: линия 44

в Console.Export.WarDataProvider.GetValues ​​() в D: \ Documents and Settings \ USER \ Desktop \ 11_16_2011 \ ЕЕ \ Console \ Export \ DataProvider.cs: линия 31

в Console.Export.ExportEngine.Export (поставщик IDataProvider) в D: \ Документы и Settings \ USER \ Desktop \ 11_16_2011 \ ЕЕ \ Console \ Export \ ExportEngine.cs: линия 25

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Надлежащее изучение взаимоблокировок может быть выполнено с помощью Sql Profiler, у которого есть некоторые события для этого

но

Он показывает не всю собранную полезную информацию - сохранение событий в формате xml и копание в этой xmls может дать вам гораздо больше информации о проблеме

или

Вы можете использовать внутреннюю регистрацию взаимоблокировок сервером sql в свой собственный журнал ошибок. Поведение контролируется с помощью флагов трассировки 1222 и 1204.

и

Часто правильное индексирование решает проблему взаимоблокировки, если один из операторов, участвующих в взаимоблокировке, использует таблицу или сканирование pk

1 голос
/ 21 декабря 2011

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

  • Что касается лучшего способа отладки этого IРекомендую вам сделать две вещи: использовать try, перехватывать блоки для захвата и обработки ошибки в вашей программе.
  • Сравните эту программу с программой, с которой она зашла в тупик.У вас есть смертельное объятие , которое иногда можно решить, изменив порядок, в котором ссылки на таблицы содержатся в транзакциях.

Вот руководство по обработке тупиковых ситуаций .

...