2010-02-10 6 views
2

J'ai un problème avec cette procédure stockée qui fonctionne 99% du temps dans toute notre application, mais expirera lorsqu'elle sera appelée à partir d'une partie particulière de l'application.La procédure stockée très simple expirera

La table ne contient que 3 colonnes et contient environ 300 enregistrements. La procédure stockée ne ramène un enregistrement et ressemble à ce

« Select * from table où la colonne = @parameter »

Lorsque le sp est exécuté en studio de gestion, il faut: 00 secondes.

La procédure stockée est beaucoup utilisée dans notre application, mais elle semble expirer dans une partie de notre programme. Je ne peux pas penser à une raison pour laquelle un sp si simple expirerait. Des idées?

Ceci est une application de bureau vb.net et utilisant le serveur sql 2005.

+0

De quel type est "Colonne"? –

Répondre

6

Vous avez un code qui est déjà titulaire d'un verrou sur la table ne peut donc pas être lu.

+0

Vous aviez raison. J'ai ajouté "avec (nolock)" à mon proc stocké et ça s'est bien passé. Si je supprime le "avec (nolock)" alors je reçois l'erreur de délai d'attente à nouveau. Merci de votre aide. – jacook11

0

vous devez obtenir des mesures de performance. Utilisez le profileur sql pour confirmer que le SP est lent à ce moment-là ou autre chose. Si c'est le SQL qui est lent à ce moment - considérer des choses comme des verrous qui peuvent forcer votre requête à attendre. Nous le savons et nous pourrions être en mesure de donner des informations plus spécifiques à ce stade.

Si ce n'est pas le SP, mais dire le code VB, un profil décent comme RedGate's Ants ou JetBrains' DotTrace peut aider.

3

essayer

SELECT * FROM Table WITH (NOLOCK) WHERE Column = @parameter 
+1

N'utilisez NOLOCK que si la précision des données n'a pas d'importance. –

+0

Cela a effectivement résolu mon problème. J'ai ajouté "avec (nolock)" et mon proc stocké correctement. J'ai enlevé le "avec (nolock)" et il a expiré juste comme il l'a fait avant. Merci pour votre aide. Je suis nouveau sur stackoverflow et j'ai remarqué que je ne peux sélectionner 1 réponse que comme réponse "correcte". Puisque tvanfosson a répondu en premier, j'ai marqué son comme la réponse «correcte». – jacook11

+1

Assurez-vous de bien comprendre ce que NOLOCK est en train de faire, avant de l'utiliser dans votre code de production. –

1

Nous avons eu un problème similaire, nous avons eu plusieurs procédures stockées qui garderait le calendrier dans l'application (~ 30 sec), mais fonctionnent très bien avec SSMS.

La solution à court terme que nous avons utilisée était de réexécuter les procédures stockées qui ont résolu le problème temporairement. Si cela vous permet également de résoudre le problème temporairement, vous devez examiner les problèmes de reniflage des paramètres.

Pour plus d'informations futher voir http://dannykendrick.blogspot.co.nz/2012/08/sql-parameter-sniffing.html