"L'operazione di attesa è scaduta" durante l'esecuzione di SQL Server in Hyper-V


22

Sto eseguendo SQL Server (2012) su un'istanza Hyper-V. Ha molte risorse e il 25% riservato alle risorse totali, il disco rigido virtuale è posizionato su un'unità SSD molto veloce per tempi di risposta rapidi.

Di tanto in tanto quando alle applicazioni che utilizzano SQL Server non si accede da un po 'di tempo, viene visualizzato l'errore "L'operazione di attesa è scaduta". Quando si ricarica o si riprova ad accedere al database, sembra che si sia "svegliato" ed è più veloce che mai.

Esiste un modo per garantire che questa modalità di sospensione graduale non si verifichi in questo tipo di ambiente?

aggiunto

Dettagli eccezione: System.ComponentModel.Win32Exception: operazione di attesa scaduta


1
Una possibilità per verificare è sulle opzioni del database, assicurarsi che la chiusura automatica sia impostata su False. Se ciò si verificasse, sarebbe possibile visualizzare gli eventi di chiusura e apertura nel registro SQL.
Jason Cumberland il

La modifica di AutoClose non ha funzionato, probabilmente non sono i database a rallentare. Molto probabilmente il problema è legato alla combinazione Hyper-V e SQL Server.
Eric Herlitz,

Se le altre risposte non funzionano, provare stackoverflow.com/a/28626223/1290868 che indica di eseguire le operazioni su support.microsoft.com/en-us/kb/2605597 Questo potrebbe aiutare.
myuce,

Per Sql Server, l'obiettivo dovrebbe essere riservato al 100%.
Joel Coel,

Risposte:


22

Prova a eseguire questo comando:

exec sp_updatestats

Ha incredibilmente risolto il problema.

Il codice sopra è l'errore prima dell'esecuzione del comando.

[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
Non eseguire semplicemente questo comando senza comprenderne le conseguenze. sqlperformance.com/2013/07/sql-statistics/statistics-updates e stackoverflow.com/questions/23440770/...
Rosdi

2
Dovresti conoscere le probabili conseguenze prima di eseguire questo comando (in effetti ogni comando che esegui).
Sohail xIN3N,

3
Sono sinceramente interessato alla tua preoccupazione per le conseguenze di questo? Il post collegato dice "potrebbe effettivamente fare più danni che bene, ed è l'opzione meno raccomandabile". - ma sembra che l'unico problema sia che potrebbe fare cose già fatte dai tuoi piani di manutenzione o essere inefficiente - se l'alternativa è un'istanza del server SQL completamente rotta - Non sono sicuro del motivo per cui ti dispiacerebbe che possa essere lento o ridondante?
Ian Grainger,

1
Mi chiedo la stessa cosa di @IanGrainger ... a qualcuno interessa capire perché l'esecuzione exec sp_updatestatsè una cattiva idea?
Flo

1

Ho avuto lo stesso problema. La corsa exec sp_updatestatsfunzionava a volte, ma non sempre. Ho deciso di utilizzare la NOLOCKdichiarazione nelle mie query per accelerare le query. Basta aggiungere NOLOCKdopo la clausola FROM, ad esempio:

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

Leggi l'articolo completo qui .


1

Ho avuto lo stesso identico problema e ho scoperto che era causato da un'allocazione di memoria insufficiente nella VM Hyper-V. Avevo la memoria impostata su dinamica ma non si ridimensionava come richiesto: passare a una quantità fissa di memoria, nel mio caso 32 GB, ha risolto il problema. L'interazione tra SqlBulkCopy e Sql Server non sembra in grado di ottenere più memoria quando richiesto ??

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.