web-dev-qa-db-fra.com

«L'opération d'attente a expiré» lors de l'exécution de SQL Server dans Hyper-V

J'exécute SQL Server (2012) sur une instance Hyper-V. Il a beaucoup de ressources et 25% réservés des ressources totales, le VHD est placé sur un disque SSD très rapide pour des temps de réponse rapides.

De temps en temps, lorsque les applications qui utilisent SQL Server n'ont pas été accédées pendant un certain temps, elles obtiennent l'erreur "L'opération d'attente a expiré". Lors du rechargement ou de la nouvelle tentative d'accès à la base de données, il semble avoir été "réveillé" et est plus rapide que jamais.

Existe-t-il un moyen de garantir que ce mode de sommeil doux ne se produit pas dans ce type d'environnement?

Ajoutée

Détails de l'exception: System.ComponentModel.Win32Exception: l'opération d'attente a expiré

23
Eric Herlitz

Essayez d'exécuter cette commande:

exec sp_updatestats

Cela a incroyablement résolu le problème.

Le code au-dessus de son l'erreur avant l'exécution de la commande.

[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
22
Jeferson Tenorio

J'ai eu le même problème. Fonctionnement exec sp_updatestats fonctionnait parfois, mais pas toujours. J'ai décidé d'utiliser l'instruction NOLOCK dans mes requêtes pour accélérer les requêtes. Ajoutez simplement NOLOCK après votre clause FROM, par exemple:

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

Lisez l'article complet ici .

2
Flo

J'ai eu exactement le même problème et j'ai trouvé qu'il était dû à une allocation de mémoire insuffisante sur la machine virtuelle Hyper-V. La mémoire était réglée sur dynamique, mais elle n'était pas mise à l'échelle comme requis - le passage à une quantité fixe de mémoire, dans mon cas 32 Go, a résolu le problème. L'interaction entre SqlBulkCopy et Sql Server ne semble pas capable d'obtenir plus de mémoire en cas de besoin ??

1
TRex