web-dev-qa-db-fra.com

Win32Exception (0x80004005): l'opération d'attente a expiré

J'exécute une page de pages Web ASP.NET qui, lors du chargement initial, tire une liste d'éléments d'un serveur SQL. Cette requête s'exécute dans une seconde ou deux et charge la page dans les 2 secondes. Le retour est d'environ 1000 enregistrements, à peu près. Je tire des noms d'hôte d'une base de données SQL de Service Manager avec d'autres informations.

Dans cette page, j'ai une recherche intégrée qui exécute essentiellement la même requête mais la lance avec un LIKE basé sur le nom d'hôte. Cela charge la même page avec tous les noms d’hôte qui contiennent une partie de la requête de recherche. La requête s'exécute généralement dans SQL Management Studio en moins d'une seconde, mais le chargement de la page prend beaucoup plus de temps et arrive parfois à expiration.

Ma question est la suivante: pourquoi la recherche par paramètre prend-elle tellement plus de temps et parfois même un délai d’expiration sans raison apparente? Existe-t-il des mesures qui peuvent être prises pour limiter ce délai? Ci-dessous est l'erreur complète.

Erreur du serveur dans '/' Application.


The wait operation timed out 

Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Consultez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails d'exception:

System.ComponentModel.Win32Exception: The wait operation timed out
Source Error: 

Line 13:     }
Line 14:     
Line 15:     var selectedData = db.Query(selectCommand, searchTerm);
Line 16: 
Line 17:

Source File:  c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml    Line:  15

Trace de la pile:

[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) +1753346
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5295154
   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) +1682
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +59
   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) +1325
   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.ExecuteReader() +12
   WebMatrix.Data.<QueryInternal>d__0.MoveNext() +152
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   WebMatrix.Data.Database.Query(String commandText, Object[] parameters) +103
   ASP._Page_servers_default_cshtml.Execute() in c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml:15
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197
   System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +69
   System.Web.WebPages.WebPage.ExecutePageHierarchy() +151
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76
   System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +114

Information sur la version: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929

45
Bolson32

Le problème que vous rencontrez est que la commande de requête prend trop de temps. Je crois que le délai d’exécution par défaut d’une requête est de 15 secondes. Vous devez définir le CommandTimeout (en secondes) afin qu'il soit suffisamment long pour que la commande puisse terminer son exécution. Le "CommandTimeout" est différent du "Délai de connexion" dans votre chaîne de connexion et doit être défini pour chaque commande.

Dans votre sql Selecting Event, utilisez la commande:

e.Command.CommandTimeout = 60

par exemple:

Protected Sub SqlDataSource1_Selecting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)
    e.Command.CommandTimeout = 60
End Sub
32
Jeff

À tous ceux qui en savent plus que moi, plutôt que de marquer cela comme inutile ou trompeur, lisez-le encore une fois. J'avais des problèmes avec ma machine virtuelle (VM) qui ne répondait plus du fait que toutes les ressources étaient consommées par des threads verrouillés. La suppression des threads est donc ma seule option. Je ne le recommande pas à ceux qui exécutent de longues requêtes, mais je peux aider ceux qui sont bloqués avec le non-réponse VM ou quelque chose du genre. C'est à chacun de prendre l'appel. Oui, cela tue votre requête mais cela a sauvé ma machine VM en cours de destruction).

Serverstack a déjà répondu à une question similaire. Il a résolu mon problème avec SQL sur VM machine. Veuillez vérifier ici

Vous devez exécuter la commande suivante pour résoudre les problèmes liés aux index.

exec sp_updatestats
23
Sanjay Zalke

Si vous utilisez Entity Framework, vous pouvez prolonger le délai d'attente par défaut (pour donner plus de temps à une requête de longue durée) en procédant comme suit:

myDbContext.Database.CommandTimeout = 300;

myDbContext est votre instance de DbContext et 300 est la valeur du délai d'attente en secondes.

(Syntaxe actuelle à partir de Entity Framework 6.)

6
Jon Schneider

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())

Lire l'article complet ici .

5
Flo

Regardez dans les tables de réindexation de votre base de données.

Vous pouvez d’abord déterminer le niveau de fragmentation - et s’il dépasse 10% environ, vous pourriez tirer parti d’une réindexation. Si elle est très élevée, il est probable que cela crée un goulot d'étranglement de performances significatif.

http://blog.sqlauthority.com/2009/01/30/sql-server-2008-2005-rebuild-every-index-of-all-tables-of-database-rebuild-index-with- facteur de remplissage /

Cela devrait être fait régulièrement.

4
niico

J'ai essayé les autres réponses ici ainsi que quelques autres. J'ai même arrêté et redémarré les services SQL. Rien n'a fonctionné.

Cependant, le redémarrage de mon ordinateur a fonctionné.

4
MiniRagnarok

Nous avons rencontré cette erreur après une mise à niveau de 2008 à 2014 de SQL Server, où certaines de nos chaînes de connexion précédentes pour le développement local avaient une source de données =./Like this

        <add name="MyLocalDatabase" connectionString="Data Source=./;Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/>

Le changement de ./ en (local) ou localhost a résolu le problème.

<add name="MyLocalDatabase" connectionString="Data Source=(local);Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/>
2
Brett Bim

Ma table n'avait pas de clé primaire alors j'avais une erreur de time out. après avoir réglé la clé sloved.

1
leyla azari

Ce problème se produira en raison du temps d'exécution de la commande sqlcommand. Définissez le CommandTimeout = 100 ou la valeur souhaitée

Valeur de délai d'attente en secondes @Remarque Il est préférable de fournir la valeur optimale

0
mydeenali