Win32Exception(0x80004005):等待操作超时

我正在运行一个ASP.NET Web Pages页面,它在初始化负载时从SQL服务器中抽取一个项目列表。 这个查询运行在一秒钟左右,并在2秒内加载页面。 回报大概是1000条logging, 我从Service Manager SQL数据库中提取主机名以及一些其他信息。

在这个页面中,我有一个内置的search,本质上运行完全相同的查询,但是使用基于主机名的LIKE运行它。 这将加载与包含部分search查询的所有主机名相同的页面。 查询一般在SQLpipe理工作室内运行一秒钟,但加载页面需要相当长的时间,有时会超时。

我的问题是,为什么基于参数的search需要更长的时间,有时超时没有明显的原因。 是否有任何措施可以缓解这种超时? 以下是完整的错误。

“/”应用程序中的服务器错误。


The wait operation timed out 

说明:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪,了解有关错误的更多信息以及源代码的位置。

exception详情:

 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 Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929

您遇到的问题是查询命令花费太长时间。 我相信查询执行的默认超时时间是15秒。 您需要设置CommandTimeout(以秒为单位),以便命令完成其执行足够长的时间。 “CommandTimeout”与连接string中的“Connection Timeout”不同,必须为每个命令设置。

在你的sqlselect事件,使用命令:

 e.Command.CommandTimeout = 60 

例如:

 Protected Sub SqlDataSource1_Selecting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) e.Command.CommandTimeout = 60 End Sub 

对于所有比我更了解的人,而不是把它标上无益或误导的标签,再读一遍。 我的虚拟机(VM)出现了问题,因为所有资源都被locking的线程占用,所以杀死线程是我唯一的select。 我不会向任何正在运行长时间查询的人推荐此function,但可能会帮助那些无法响应VM的人。 它最新的个人接听电话。 是的,它会杀死你的查询,但它保存了我的虚拟机被破坏。

Serverstack已经回答了类似的问题。 它解决了我在VM机器上的SQL问题。 请在这里检查

您需要运行以下命令来修复索引问题。

 exec sp_updatestats 

我遇到过同样的问题。 运行exec sp_updatestats确实有效,但并不总是如此。 我决定在我的查询中使用NOLOCK语句来加速查询。 在你的FROM子句之后加上NOLOCK ,例如:

 SELECT clicks.entryURL, clicks.entryTime, sessions.userID FROM sessions, clicks WITH (NOLOCK) WHERE sessions.sessionID = clicks.sessionID AND clicks.entryTime > DATEADD(day, -1, GETDATE()) 

阅读完整的文章在这里 。

看看你的数据库重新索引表。

你可以先找出碎片级别 – 如果它高于10%左右,你可以从重新索引中受益。 如果它非常高,这可能会造成显着的性能瓶颈。

http://blog.sqlauthority.com/2009/01/30/sql-server-2008-2005-rebuild-every-index-of-all-tables-of-database-rebuild-index-with-fillfactor/

这应该定期完成。

我尝试了其他的答案以及其他一些答案。 我什至停止并重新启动SQL服务。 没有工作。

但是,重新启动我的电脑确实有效。

从2008年到2014年SQL Server升级之后,我们遇到了这个错误,在这里我们的一些以前的本地开发连接string有一个数据源=。/像这样

  <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;"/> 

如果您使用的是Entity Framework ,可以通过执行以下操作来延长默认的超时时间(以使运行时间较长的查询可以完成更多的时间):

 myDbContext.Database.CommandTimeout = 300; 

其中myDbContext是您的DbContext实例, 300是以秒为单位的超时值。

(当前的语法和entity framework6一样)

我的表没有主键,然后我有时间出错。 设置关键之后。