2009-03-05 4 views
7

J'ai un service Web qui fonctionne correctement depuis quelques années sans modification. Soudainement, il décide aujourd'hui qu'il n'aimerait pas fonctionner et lance un délai SQL:Dépannage de SQL Server Timeout

System.Data.SqlClient.SqlException: Expiration du délai. Le délai d'expiration s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. Il est intéressant de noter que ce service web vit sur le même serveur que la base de données, et que si je retire la requête d'une trace SQL et l'exécute en studio de gestion, elle revient en moins d'une seconde. Mais il est temps de sortir après exactement 30 secondes lorsqu'il est appelé du service Web sans faute. J'utilise la bibliothèque d'entreprise pour me connecter à la base de données, donc je ne peux pas m'imaginer que cela a commencé de façon aléatoire.

Je ne suis pas sûr de ce qui pourrait soudainement le faire cesser de fonctionner. J'ai recyclé le pool d'applications dans lequel il se trouve et j'ai même redémarré le processus SQL que je voyais utiliser. Même comportement De toute façon je peux résoudre ce problème?

MISE À JOUR: Mitch cloués il. Dès que j'ai ajouté "WITH RECOMPILE" avant le mot-clé "AS" dans la définition de sproc, il est revenu à la vie. Bravo!

+0

@Chris: Veuillez noter que vous ne devez pas ajouter WITH RECOMPILE à moins que ce ne soit une dernière chose. Utiliser RECOMPILE FOR est beaucoup plus ciblé –

Répondre

4

Les symptômes que vous décrivez sont 99,9% certains d'être dus à un plan de requête incorrectement mis en cache.

S'il vous plaît voir ces réponses:

qui comprennent les conseils pour reconstruire les index et assurer les statistiques sont à jour comme point de départ.

Avez-vous planifié et activé une tâche de maintenance d'index régulière?

La référence canonique est: Slow in the Application, Fast in SSMS?

+0

Vous êtes mon héros, monsieur. – Chris

1

Reconstruire tous les index pertinents.

1

Mettre à jour les statistiques, vérifier les options de jeu sur la requête dans le profileur. SSMS peut utiliser différentes options de jeu de connexion.