System.Data.SqlClient.SqlException: истекло время ожидания - PullRequest
2 голосов
/ 18 января 2011

В паре дней назад я заметил, что мое веб-приложение, дающее мне sql тайм-аут исключения, истекло.

Я очистил пару хранимых процедур, потребляющих больше ресурсов процессора, и перезапустил службу SQL Server, и мое приложение начало работать так, как раньше, быстро и без каких-либо задержек. Через три-четыре часа я проверил его еще раз и не смог загрузить страницу, поскольку это дало мне истекшее время ожидания исключения. Я проверил сервер CPU все в порядке, все выглядит хорошо. У меня есть какой-то другой сайт под тем же IIS 7 , и они работают без каких-либо исключений. Я перезапустил службу SQL Server снова, и мое приложение снова вернулось в нормальное состояние. И я думаю, что это похоже на проблему с базой данных сервера SQL, но я не уверен, как ее устранить.

Так что каждый раз, когда я получаю исключение, я просто перезапускаю службу sql, но, конечно, это не лучший способ. Пожалуйста, помогите мне решить эту проблему.

Вот одно из исключений, которое я получил.

Сообщение: исключение типа 'System.Web.HttpUnhandledException' был брошен. Источник: System.Web Inner Исключение: System.Data.UpdateException: Произошла ошибка при обновлении записей. Смотрите InnerException для подробности. ---> System.Data.SqlClient.SqlException: Тайм-аут истек. Период ожидания истекший до завершения операция или сервер не отвечать на запросы. Заявление было прекращается. в System.Data.SqlClient.SqlConnection.OnError (SqlException исключение, Boolean breakConnection) в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, Boolean breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior, runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String, Результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult результат, String methodName, Boolean sendToPipe) в System.Data.SqlClient.SqlCommand.ExecuteNonQuery () в System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute (UpdateTranslator переводчик, EntityConnection соединение, словарь 2 identifierValues, List 1 Генерируемые значения) в System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManager stateManager, адаптер IEntityAdapter) --- Конец внутренней трассировки стека исключений --- в System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManager stateManager, адаптер IEntityAdapter) в System.Data.EntityClient.EntityAdapter.Update (IEntityStateManager entityCache) в System.Data.Objects.ObjectContext.SaveChanges (Boolean acceptChangesDuringSave) в System.Data.Objects.ObjectContext.SaveChanges () в BCSCDomain.Domain.DataLayer.OtherDataLayer.UpdateHitCounter (Int32 hlistid, Int32 hcounterid) в BuyCarandSellCar.UsedCarProfilePage.HitCounter () в BuyCarandSellCar.UsedCarProfilePage.Page_Load (Объект отправитель, EventArgs e) в System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, объект o, объект t, EventArgs e) в System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Объект отправитель, EventArgs e) в System.Web.UI.Control.OnLoad (EventArgs есть System.Web.UI.Control.LoadRecursive () в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) Стек Трассировка: в System.Web.UI.Page.HandleError (Exception есть System.Web.UI.Page.UI.Page.ProcessRequestWithNoAssert (контекст HttpContext) в System.Web.UI.Page.ProcessRequest (контекст HttpContext) в ASP.usedcarlistings_profilepage_aspx.ProcessRequest (контекст HttpContext) в c: \ Windows \ Microsoft.NET \ Framework \ Temp \ v.0Файлы ASP.NET \ root \ 79794658 \ 835d6695 \ App_Web_kmrmpdbb.16.cs: строка 0 в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в Step.Tepp.Extep., Логическое и завершено синхронно)

Ответы [ 2 ]

5 голосов
/ 18 января 2011

Ну, для начала, это функция "UpdateHitCounter", которая проксимально вызывает проблему, но вы не знаете, является ли это причиной или следствием. Ваш запрос превышает установленное время, отведенное для его завершения.

Всякий раз, когда у вас плохо работает база данных, вы можете использовать широкий подход к ней - подключить к ней Sql Profiler, а затем запустить мастер настройки индекса по результатам.

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

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

В конечном счете, либо ваша база данных неоптимальна, либо ваше оборудование не соответствует трафику. Это почти наверняка первый, и эти два подхода должны помочь вам.

0 голосов
/ 18 января 2011

Звучит как негерметичное поведение.Не зная вашей общей архитектуры, я не могу сказать, что это за утечка, но я мог бы посоветовать посмотреть на все ваши таблицы и посмотреть, кажется ли, что что-то имеет куда больше строк, чем вы ожидаете.запустите ваши sprocs вручную в SQL Management Studio и посмотрите, какие из них занимают так много времени - возможно, вы запускаете алгоритм, время работы которого увеличивается с временем безотказной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...