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

22

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 aussi 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é

Eric Herlitz
la source
1
Une possibilité de vérifier est sur les options de la base de données, assurez-vous que la fermeture automatique est définie sur False. Vous pourriez voir les événements de fermeture et d'ouverture dans le journal SQL si cela se produisait.
Jason Cumberland
Changer AutoClose n'a pas fonctionné, ce n'est probablement pas les bases de données qui ralentissent. Le problème est probablement lié à la combinaison Hyper-V et SQL Server.
Eric Herlitz
Si les autres réponses ne fonctionnent pas, essayez stackoverflow.com/a/28626223/1290868 qui indique de faire ce qui se trouve sur support.microsoft.com/en-us/kb/2605597 Cela peut aider.
myuce
Pour Sql Server, l'objectif doit être réservé à 100%.
Joel Coel

Réponses:

22

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
Jeferson Tenorio
la source
3
N'exécutez pas simplement cette commande sans comprendre les conséquences. sqlperformance.com/2013/07/sql-statistics/statistics-updates et stackoverflow.com/questions/23440770/…
Rosdi
2
Vous devez connaître les conséquences probables avant d'exécuter cette commande (en fait, chaque commande que vous exécutez).
Sohail xIN3N
3
Je suis vraiment intéressé par votre inquiétude quant aux conséquences de cela? Le message lié dit "pourrait en fait faire plus de dégâts que bien, et c'est l'option la moins recommandée" - mais il semble que le seul problème est qu'il pourrait faire des choses que vos plans de maintenance font déjà, ou être inefficace - si l'alternative est une instance de serveur SQL qui est complètement cassée - je ne sais pas pourquoi cela vous dérangerait que cela puisse être lent ou redondant?
Ian Grainger
1
Je me demande la même chose que @IanGrainger ... quelqu'un veut-il expliquer pourquoi l'exécution exec sp_updatestatsest une mauvaise idée?
Flo
1

J'ai eu le même problème. La course à pied exec sp_updatestatsfonctionnait parfois, mais pas toujours. J'ai décidé d'utiliser l' NOLOCKinstruction dans mes requêtes pour accélérer les requêtes. Ajoutez juste NOLOCKaprè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 .

Flo
la source
1

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 ??

TRex
la source