Hyper-VでSQL Serverを実行しているときに「待機操作がタイムアウトしました」


22

Hyper-VインスタンスでSQL Server(2012)を実行しています。十分なリソースがあり、総リソースの25%が予約されているため、VHDは応答時間を短縮するために非常に高速なSSDドライブに配置されます。

SQL Serverを使用するアプリケーションがしばらくアクセスされない場合、「待機操作がタイムアウトしました」というエラーが表示されることがあります。データベースのリロードまたはデータベースへのアクセスの再試行時には、「ウェイクアップ」されたように見え、これまでになく高速です。

この種の環境でこのソフトスリープモードが発生しないようにする方法はありますか?

追加しました

例外の詳細: System.ComponentModel.Win32Exception:待機操作がタイムアウトしました


1
チェックする可能性の1つは、データベースオプションです。AutoCloseがFalseに設定されていることを確認してください。これが発生した場合は、SQLログで終了イベントと開始イベントを確認できます。
ジェイソンカンバーランド

AutoCloseの変更は機能しませんでした。おそらく、データベースの速度が低下するわけではありません。この問題は、おそらくHyper-VとSQL Serverの組み合わせに関連しています。
エリックハーリッツ

他の回答は、作業のtryない場合stackoverflow.com/a/28626223/1290868上で何をするように指示support.microsoft.com/en-us/kb/2605597この5月の助けを。
myuce

Sql Serverの場合、目標は100%予約する必要があります。
ジョエルCoel

回答:


22

このコマンドを実行してください:

exec 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

3
結果を理解せずにこのコマンドを実行しないでください。sqlperformance.com/2013/07/sql-statistics/statistics-updatesstackoverflow.com/questions/23440770/...
Rosdi

2
このコマンド(実際には実行するすべてのコマンド)を実行する前に、起こりそうな結果を知っておく必要があります。
ソハイルxIN3N 14

3
これの結果についてのあなたの懸念について本当に興味がありますか?リンクされた投稿には、「実際にはそれ以上のダメージを与えることができたので、推奨されない選択肢です」と書かれています。-しかし、唯一の問題は、メンテナンスプランが既に行っていることを実行するか、非効率になる可能性があることです-代替手段が完全に壊れたSQLサーバーインスタンスである場合-遅くなる可能性があるかどうかはわかりませんまたは冗長?
イアングレインジャー

1
私は@IanGraingerと同じことを疑問に思っています...実行するのexec sp_updatestatsが悪い考えである理由を詳しく説明したい人はいますか?
フロー

1

同じ問題がありました。実行exec sp_updatestatsは時々機能しましたが、常にではありませんでした。NOLOCKクエリを高速化するためにクエリでステートメントを使用することにしました。NOLOCKFROM句の後に追加するだけです。例:

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

こちらの記事全文をご覧ください


1

まったく同じ問題があり、Hyper-V VMのメモリ割り当てが不十分であることが原因であることがわかりました。メモリを動的に設定しましたが、必要に応じてスケールアップしませんでした-固定量のメモリ(私の場合は32GB)に切り替えると問題が解決しました。SqlBulkCopyとSql Serverの相互作用は、必要なときにメモリを増やすことができないようですか??

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.