Win32Exception (0x80004005): время ожидания приостановлено
Я запускаю страницу веб-страниц ASP.NET, которая при начальной загрузке вытаскивает список элементов с SQL-сервера. Этот запрос выполняется через секунду или около того и загружает страницу в течение 2 секунд. Возврат составляет около 1000 записей, дайте или возьмите. Я вытаскиваю Hostnames из базы данных SQL Service Manager вместе с другой информацией.
Внутри этой страницы у меня есть встроенный поиск, который, по сути, выполняет тот же самый запрос, но запускает его с помощью LIKE на основе имени хоста. Это загружает одну и ту же страницу со всеми именами хостов, которые содержат часть поискового запроса. Обычно запрос выполняется в SQL Management Studio менее чем за секунду, но загрузка страницы занимает значительно больше времени, а иногда и времени.
Мой вопрос: почему поиск по параметрам занимает намного больше времени, а иногда и таймаут без видимых причин. Есть ли какие-либо шаги, которые можно предпринять для смягчения этого таймаута? Ниже приведена полная ошибка.
Ошибка сервера в приложении "/".
The wait operation timed out
Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.
Сведения об исключении:
System.ComponentModel.Win32Exception: The wait operation timed out
Source Error:
Line 13: }
Line 14:
Line 15: var selectedData = db.Query(selectCommand, searchTerm);
Line 16:
Line 17:
Source File: c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml Line: 15
Трассировка стека:
[Win32Exception (0x80004005): The wait operation timed out]
[SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1753346
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5295154
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +59
System.Data.SqlClient.SqlDataReader.get_MetaData() +90
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +365
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +1325
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +175
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +134
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41
System.Data.Common.DbCommand.ExecuteReader() +12
WebMatrix.Data.<QueryInternal>d__0.MoveNext() +152
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
WebMatrix.Data.Database.Query(String commandText, Object[] parameters) +103
ASP._Page_servers_default_cshtml.Execute() in c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml:15
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197
System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +69
System.Web.WebPages.WebPage.ExecutePageHierarchy() +151
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76
System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +114
Информация о версии: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929
Ответы
Ответ 1
Проблема, с которой вы столкнулись, - это команда запроса слишком долго. Я считаю, что тайм-аут по умолчанию для выполнения запроса составляет 15 секунд. Вам нужно установить CommandTimeout (в секундах), чтобы он был достаточно длинным, чтобы команда завершила его выполнение. "CommandTimeout" отличается от "Таймаут соединения" в вашей строке подключения и должен быть установлен для каждой команды.
В своем выбранном событии sql используйте команду:
e.Command.CommandTimeout = 60
например:
Protected Sub SqlDataSource1_Selecting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)
e.Command.CommandTimeout = 60
End Sub
Ответ 2
Для всех тех, кто знает больше, чем я, вместо того, чтобы помечать его бесполезным или вводящим в заблуждение, прочитайте его еще раз. У меня возникли проблемы с тем, что моя виртуальная машина (VM) перестала отвечать на запросы из-за того, что все ресурсы потреблялись заблокированными потоками, так что уничтожение потоков - единственный вариант, который у меня был. Я не рекомендую это всем тем, кто работает с длинными запросами, но может помочь тем, кто застрял с невосприимчивой виртуальной машиной или чем-то еще. Своим людям добираться до звонка. Да, он убьет ваш запрос, но он сохранил мою машину VM, которая была уничтожена.
Serverstack уже ответил на аналогичный вопрос. Он решил мою проблему с SQL на машине VM.
Пожалуйста, проверьте здесь
Вам нужно запустить следующую команду для исправления проблем с индексами.
exec sp_updatestats
Ответ 3
У меня была такая же проблема. Выполнение exec sp_updatestats
выполнялось иногда, но не всегда. Я решил использовать оператор NOLOCK
в моих запросах, чтобы ускорить выполнение запросов.
Просто добавьте NOLOCK
после предложения FROM, например:
SELECT clicks.entryURL, clicks.entryTime, sessions.userID
FROM sessions, clicks WITH (NOLOCK)
WHERE sessions.sessionID = clicks.sessionID AND clicks.entryTime > DATEADD(day, -1, GETDATE())
Прочитайте полную статью здесь.
Ответ 4
Если вы используете Entity Framework, вы можете увеличить таймаут по умолчанию (чтобы дать длинный запрос больше времени для завершения), выполнив:
myDbContext.Database.CommandTimeout = 300;
Где myDbContext
- ваш экземпляр DbContext, а 300
- значение таймаута в секундах.
(ток синтаксиса по отношению к платформе Entity Framework 6.)
Ответ 5
Я попробовал другие ответы здесь, а также несколько других. Я даже остановился и перезапустил службы SQL. Ничего не получилось.
Однако перезагрузка моего компьютера действительно работала.
Ответ 6
Посмотрите на таблицы переиндексации в своей базе данных.
Сначала вы можете узнать уровень фрагментации - и если он превышает 10% или около того, вы можете воспользоваться повторной индексацией. Если он очень высок, вероятно, это создает значительную шею бутылки с производительностью.
http://blog.sqlauthority.com/2009/01/30/sql-server-2008-2005-rebuild-every-index-of-all-tables-of-database-rebuild-index-with-fillfactor/
Это нужно делать регулярно.
Ответ 7
Мы столкнулись с этой ошибкой после обновления с SQL Server 2008 до 2014 года, где наши некоторые из наших предыдущих строк подключения для локальной разработки имели Data Source =./like this
<add name="MyLocalDatabase" connectionString="Data Source=./;Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/>
Изменение этого параметра с./на (локальное) или локальное исправление устраняет проблему.
<add name="MyLocalDatabase" connectionString="Data Source=(local);Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/>
Ответ 8
В моей таблице не было первичного ключа, тогда у меня была ошибка времени. после того, как задан ключ.
Ответ 9
Эта проблема возникает из-за времени выполнения команды sqlcommand. Установите CommandTimeout = 100 или значение желания
Значение тайм-аута в секундах @Примечание Лучше обеспечить оптимальное значение