Frage "Die Wartezeit wurde überschritten", wenn SQL Server in Hyper-V ausgeführt wurde


Ich führe SQL Server (2012) auf einer Hyper-V-Instanz aus. Es hat viele Ressourcen und 25% der gesamten Ressourcen reserviert, die VHD ist auf einem sehr schnellen SSD-Laufwerk für schnelle Reaktionszeiten platziert.

Hin und wieder, wenn auf die Anwendungen, die den SQL Server verwenden, eine Zeitlang nicht zugegriffen wurde, erhalten sie den Fehler "die Warteoperation abgelaufen". Beim erneuten Laden oder erneuten Versuch, auf die Datenbank zuzugreifen, scheint es "aufgewacht" zu sein und es ist so schnell wie immer.

Gibt es eine Möglichkeit sicherzustellen, dass dieser weiche Schlafmodus in dieser Umgebung nicht auftritt?

Hinzugefügt

Ausnahmedetails: System.ComponentModel.Win32Exception: Die Wartezeit wurde überschritten


21
2017-08-22 11:43


Ursprung


Eine Möglichkeit zu überprüfen ist in den Datenbankoptionen, stellen Sie sicher, dass Auto Close auf False festgelegt ist. Sie könnten die Abschluss- und Eröffnungsereignisse im SQL-Protokoll sehen, wenn dies der Fall war. - Jason Cumberland
Ich werde es versuchen, danke. - Eric Herlitz
Ändern von AutoClose hat nicht funktioniert, es ist wahrscheinlich nicht die Datenbanken, die langsamer werden. Das Problem hängt wahrscheinlich mit der Kombination von Hyper-V und SQL Server zusammen. - Eric Herlitz
Wenn andere Antworten nicht funktionieren, versuchen Sie es stackoverflow.com/a/28626223/1290868 was sagt, was zu tun ist support.microsoft.com/en-us/kb/2605597 Dies kann helfen. - myuce
Für Sql Server sollte das Ziel 100% reserviert sein. - Joel Coel


Antworten:


Versuchen Sie, diesen Befehl auszuführen:

exec sp_updatestats

Es, unglaublich, löste das Problem.

Der Code darüber ist der Fehler vor dem Befehl ausgeführt worden.

[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

21
2017-10-25 13:33



Führen Sie diesen Befehl nicht einfach aus, ohne die Konsequenzen zu verstehen. sqlperformance.com/2013/07/sql-statistics/statistics-updates und stackoverflow.com/questions/23440770/... - Rosdi
Sie sollten die wahrscheinlichen Konsequenzen kennen, bevor Sie diesen Befehl ausführen (in der Tat jeden Befehl, den Sie ausführen). - Sohail xIN3N
Ich bin wirklich interessiert an Ihrer Besorgnis über die Folgen davon? Der Postlink sagt: "Könnte tatsächlich mehr Schaden anrichten, als gut, und ist die am wenigsten empfehlenswerte Option." - Aber es scheint, das einzige Problem ist, dass es Dinge tun könnte, die Ihre Wartungspläne bereits tun, oder ineffizient sein - wenn die Alternative eine SQL-Server-Instanz ist, die komplett kaputt ist - ich bin mir nicht sicher, warum Sie daran denken, dass es langsam sein kann oder überflüssig? - Ian Grainger
Ich frage mich dasselbe wie @IanGrainger ... jemand kümmert sich darum, warum er ausführt exec sp_updatestatsist eine schlechte Idee? - Flo


Ich hatte das gleiche Problem. Laufen exec sp_updatestats hat manchmal gearbeitet, aber nicht immer. Ich habe mich entschieden, das zu benutzen NOLOCK Anweisung in meinen Abfragen, um die Abfragen zu beschleunigen. Einfach hinzufügen NOLOCK nach Ihrer FROM-Klausel, z. B .:

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

Lesen Sie den ganzen Artikel Hier.


1
2017-09-02 15:36





Ich hatte genau das gleiche Problem und ich fand, dass es durch nicht genügend Speicherzuweisung auf der Hyper-V-VM verursacht wurde. Ich hatte Speicher auf dynamische eingestellt, aber es war nicht skalieren wie erforderlich - Umstellung auf eine feste Menge an Speicher, in meinem Fall 32 GB, löste das Problem. Die Interaktion zwischen SqlBulkCopy und Sql Server scheint nicht in der Lage zu sein, mehr Speicher bei Bedarf zu bekommen ??


1
2017-07-26 07:54