在 Hyper-V 中运行 SQL Server 时出现“等待操作超时”

Eri*_*itz 24 hyper-v sql-server

我在 Hyper-V 实例上运行 SQL Server (2012)。它拥有充足的资源和 25% 的总资源预留,VHD 被放置在一个非常快速的 SSD 驱动器上以实现快速响应时间。

当使用 SQL Server 的应用程序有一段时间没有被访问时,它们会时不时地收到错误“等待操作超时”。当重新加载或重试访问数据库时,它似乎已经“唤醒”并且和以往一样快。

有什么办法可以保证这种软睡眠模式在这种环境下不会出现?

添加

异常详细信息: System.ComponentModel.Win32Exception:等待操作超时

小智 23

尝试执行此命令:

执行 sp_updatestats

令人难以置信的是,它解决了这个问题。

上面的代码是执行命令之前的错误。

[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) +1742110
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5279619
   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) +1434
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +61
   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) +1355
   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.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +140
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +316
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +86
   System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1482
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +21
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +79
   System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e) +22
   System.Web.UI.Control.PreRenderRecursiveInternal() +83
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +974
Run Code Online (Sandbox Code Playgroud)

  • 不要在不了解后果的情况下简单地运行此命令。http://sqlperformance.com/2013/07/sql-statistics/statistics-updates 和 http://stackoverflow.com/questions/23440770/what-actually-exec-sp-updatestats-will-do (4认同)
  • 我真的很想知道您对此后果的担忧吗?链接的帖子说“实际上可以造成更大的伤害,并且是最不值得推荐的选择。” - 但似乎唯一的问题是它可能会做你的维护计划已经做的事情,或者效率低下 - 如果替代方案是一个完全损坏的 SQL 服务器实例 - 我不知道你为什么会介意它可能会很慢还是多余的? (3认同)
  • 在运行此命令之前,您应该知道可能的后果(实际上是您运行的每个命令)。 (2认同)
  • 我想知道与 @IanGrainger 同样的事情......有人愿意详细说明为什么执行 `exec sp_updatestats` 是一个坏主意吗? (2认同)