Délai d'attente expiré. Le délai écoulé avant la fin de l'opération ou le serveur ne répond pas. L'instruction a été arrêtée
J'ai beaucoup d'utilisateurs sur mon site web (20000-60000 par jour), qui est un site de téléchargement de fichiers mobiles. J'ai accès à distance à mon serveur (windows server 2008 R2).
J'ai reçu "Serveur non disponible" erreurs avant, mais je suis en train de voir une erreur de délai de connexion.
Je ne suis pas familier avec cela - pourquoi ne produit-il et comment puis-je résoudre ce problème?
Le message d'erreur ci-dessous:
Erreur de serveur dans l'Application'/'. Délai d'attente expiré. Le délai d'attente
écoulé avant la fin de l'opération ou le serveur n'est pas
de répondre. La déclaration a été résilié. Description: Une
exception non gérée s'est produite pendant l'exécution de votre site web actuel
demande. Veuillez consulter la trace de la pile pour plus d'informations sur la
d'erreur et d'où il vient dans le code.Détails De L'Exception: System.Les données.SqlClient.SqlException: Délai D'Attente
expiré. Le délai écoulé avant la fin de l'
l'opération ou le serveur ne répond pas. La déclaration a été
résilié.Source De L'Erreur:
Une exception non gérée s'est produite lors de l'exécution de la
demande web actuelle. Informations concernant l'origine et l'emplacement de
l'exception peut être identifié à l'aide de la trace de pile d'exception ci-dessous.Trace De La Pile:
[SqlException (0x80131904): Délai d'attente expiré. Le délai d'attente
écoulé avant la fin de l'opération ou le serveur n'est pas
de répondre. La déclaration a été résilié.]
Système.Les données.SqlClient.SqlConnection.OnError(exception SqlException,
Valeur de type Boolean breakConnection) +404
Système.Les données.SqlClient.TdsParser.ThrowExceptionAndWarning() +412
Système.Les données.SqlClient.TdsParser.Exécuter(RunBehavior runBehavior,
SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj) +1363
Système.Les données.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,
RunBehavior runBehavior, Chaîne resetOptionsString) +6387741
Système.Les données.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean
async) +6389442
Système.Les données.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Chaîne
méthode, DbAsyncResult résultat) +538
Système.Les données.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult
résultat, la Chaîne methodName, Boolean sendToPipe) +689
Système.Les données.SqlClient.SqlCommand.ExecuteNonQuery() +327
NovinMedia.Les données.DbObject.RunProcedure(String storedProcName,
IDataParameter[] paramètres, Int32& rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online(Objet Session_End,
Boolean En Ligne) +440
NiceFileExplorer.Mondiale.Application_Start(Object sender, EventArgs e)
+163[HttpException (0x80004005): Délai d'attente expiré. Le délai d'attente
écoulé avant la fin de l'opération ou le serveur n'est pas
de répondre. La déclaration a été résilié.]
Système.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedmode(HttpContext
contexte, HttpApplication app) +4052053
Système.Web.HttpApplication.RegisterEventSubscriptionsWithIIs(IntPtr
appContext, HttpContext contexte, MethodInfo[] les gestionnaires) +191
Système.Web.HttpApplication.InitSpecial(HttpApplicationState état,
MethodInfo[] les gestionnaires, IntPtr appContext, HttpContext contexte) +352
Système.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr
appContext, HttpContext contexte) +407
Système.Web.De l'hébergement.PipelineRuntime.InitializeApplication(IntPtr
appContext) +375[HttpException (0x80004005): Délai d'attente expiré. Le délai d'attente
écoulé avant la fin de l'opération ou le serveur n'est pas
de répondre. La déclaration a été résilié.]
Système.Web.HttpRuntime.FirstRequestInit(HttpContext contexte) +11686928
Système.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext contexte)
+141 Système.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest
wr, HttpContext contexte) +4863749
MODIFIER APRÈS LES RÉPONSES:
mon Application_Start
dans Global.asax
est comme ci-dessous:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
La procédure stockée appelée est:
ALTER Procedure [dbo].[sp_OnlineUsers_Update_SessionEnd_And_Online]
@Session_End datetime,
@Online bit
As
Begin
Update OnlineUsers
SET
[Session_End] = @Session_End,
[Online] = @Online
End
J'ai deux méthodes pour obtenir des utilisateurs en ligne:
- à l'aide de
Application["OnlineUsers"] = 0;
- l'autre à l'aide de la base de données
Donc, pour la méthode #2-je réinitialiser tous les OnlineUsers à Application_Start
. Il y a plus de 482,751 enregistrements dans cette table.
- Comme il est dit ici par Défaut est de 15 secondes
- Mieux de faire l'analyse des causes profondes, Il y a plusieurs raisons à cause de ces problèmes. La plus courante est la structure complexe de la requête. J'ai fait face à la même question lorsque j'extrais des Images stockées en tant que valeurs hexadécimales dans le tableau.
- Autres que les causes ci-dessus, je vais ajouter un de plus: Verrouillage de délai d'attente: docs.microsoft.com/en-us/sql/t-sql/statements/... Si ce thread est en attente pour le lock trop long, il est en attente en fonction sur le document ci-dessus.
Vous devez vous connecter pour publier un commentaire.
Semble que vous avez une requête qui prend plus de temps qu'il ne le devrait.
À partir de votre trace de la pile et de votre code, vous devriez être en mesure de déterminer exactement ce que la requête qui est.
Ce type de délai d'attente peut avoir trois causes;
Un blocage peut être difficile à fixer, mais il est facile de déterminer si c'est le cas. Se connecter à votre base de données avec Sql Server Management Studio. Dans le volet gauche, cliquez-droit sur le nœud du serveur et sélectionnez Moniteur d'Activité. Prendre un regard sur les processus en cours d'exécution.
Normalement, la plupart seront en veille ou en cours d'exécution. Lorsque le problème se produit, vous pouvez identifier tous les processus bloqué par l'état du processus. Si vous faites un clic droit sur le processus et sélectionnez détails il va vous montrer la dernière requête exécutée par le processus.
La deuxième question sera la cause de la base de données à utiliser un sous-optimal du plan de requête. Il peut être résolu en désactivant les statistiques:
Si cela ne fonctionne pas, vous pouvez également essayer de
Vous ne devriez pas faire lors de votre serveur est sous une charge lourde, car il sera temporairement subir une grosse performance frappé car tous les procs et les requêtes sont recompilées lors de la première exécution.
Cependant, comme vous l'état de la question se produit parfois, et la trace de la pile indique que votre demande est en cours de démarrage, je pense que vous exécutez une requête qui s'exécute uniquement sur l'occasion. Vous pouvez être mieux en forçant SQL Server ne pas réutiliser un précédent plan de requête. Voir cette réponse pour plus de détails sur la façon de le faire.
J'ai déjà abordé sur la troisième question, mais vous pouvez facilement déterminer si la requête de paramétrage, par l'exécution de la requête manuellement, par exemple à l'aide de Sql Server Management Studio. Si la requête prend trop de temps, même après la réinitialisation, les statistiques, vous aurez probablement besoin de les régler. Pour obtenir de l'aide avec cela, vous devriez poster exactement requête dans une nouvelle question.
exec sp_updatestats
résolu mon problème. Merci beaucoup!Dans votre code lorsque vous exécutez la procédure stockée, vous devriez avoir quelque chose comme ceci:
Ajouter cette ligne de code:
Cela permettra d'attendre autant de temps que nécessaire pour la fin de l'opération.
Vous pouvez définir la
CommandTimeout
propriété de la Commande SQL pour permettre l'exécution est longue des transactions SQL.Vous pourriez aussi avoir besoin de regarder la Requête SQL qui est à l'origine du délai d'attente.
Alors que toutes les réponses antérieures aborder la question, ils ne couvrent pas tous les cas.
Microsoft a reconnu le problème et il fixe en 2011 pour les systèmes d'exploitation supportés, donc si vous avez la trace de la pile comme:
vous devez mettre à jour votre .NET assemblées.
Voir KO 2605597 pour plus de détails
https://support.microsoft.com/kb/2605597
Il sera peut-être utile pour quelqu'un.
J'ai fait face au même problème et dans mon cas, la raison en était l'occurrence de SqlConnection a été ouvert et ne pas être éliminés dans la méthode que j'ai appelé en boucle avec environ 2500 itérations. Le pool de connexion a été épuisé. Bon élimination résolu le problème.
using
blocs) j'ai ce problème de délai d'attente. Cela semblait pour le résoudre.J'ai fait face à un même problème travaillé autour de 3 jours. J'ai remarqué que notre nombre d'enregistrements ne sont pas beaucoup notre développeur senior garde les 2 images et des Empreintes digitales dans la base de données. Quand j'ai essayer de chercher ce que les valeurs hexadécimales en prenant le temps long, je calcule la moyenne de temps pour exécuter ma procédure, son autour de 38 secondes. La valeur par défaut commandtimeout est de 30 secondes alors son moins que la moyenne de temps nécessaire pour exécuter ma procédure stockée. J'ai mis mon commandtimeout comme ci-dessous
et sa fonctionne bien, mais parfois, si votre requête prend plus de 50 secondes, il invite même erreur.
Vous devez définir CommandTimeout attribut. Vous pouvez définir la CommandTimeout attribut dans DbContext de la classe enfant.
J'ai rencontré cette erreur récemment, et après une brève enquête, a trouvé la cause de l'être que nous avons été en cours d'exécution hors de l'espace sur le disque tenue de la base de données (moins de 1GO).
Dès que j'ai déplacé les fichiers de base de données (.mdf et .ldf) à un autre disque sur le même serveur (avec beaucoup plus d'espace), de la même page (l'exécution de la requête) qui avait dépassé chargé dans un délai de trois secondes.
Une autre chose à étudier, tout en essayant de résoudre cette erreur, c'est la taille de la base de données des fichiers journaux. Vos fichiers de log juste pourriez avoir besoin d'être diminué.
J'ai des problème avec de gros calcul dans sp_foo qui prennent beaucoup de temps donc je fixe
avec ce petit bout de code
@SilverLight.. C'est clairement un problème avec un objet de Base de données. Il peut être un mal écrit de la requête, ou l'absence d'index. Mais comme de maintenant, je ne vais pas vous suggérons d'augmenter le délai d'attente, sans examiner la question avec votre Base de données des objets
Mettre un point d'arrêt sur cette ligne de code pour trouver le nom de la procédure et enfin d'optimiser la procédure, en regardant son plan d'exécution.
Je ne peux pas vous aider plus jusqu'au moment où vous poste des détails sur la procédure stockée.
essayer
alors
reconstruire votre index
Délai d'attente par défaut est de 15 secondes, pour changer les choses, 0 est illimité, tout autre nombre est le nombre de secondes.
Dans Le Code
Dans Votre Site Web.La configuration, la Commande "Timeout=0;" n'a pas le temps, ou comme en-dessous de 1 heure (3600 secondes)
TLDR:
J'ai souvent rencontré cette erreur, pour diverses raisons, et ont eu diverses solutions, y compris:
les causes sous-jacentes (peut-être pas les données liées)