2010-02-04 7 views
0

Je rencontre un problème avec SQL Server 2005, où une procédure stockée semble se bloquer/se bloquer de manière aléatoire et ne renvoie aucun résultat.SPROC se bloque dans SQL Server 2005

Ce que la procédure stockée fait est d'appeler une fonction, qui à son tour fait une union de deux fonctions différentes - retournant le même type de données, mais à partir de différents critères. Rien n'a avancé. Je ne pense pas que les fonctions soient suspendues, car il y a d'autres SPROC qui appellent les mêmes fonctions sans problème, même lorsque le premier est verrouillé. Une fois que le SPROC se bloque, toutes les autres tentatives d'appel entraîneront un délai d'attente - pas dans l'appel lui-même, mais le temps de réponse sera trop important, car aucun résultat n'est renvoyé, le code lèvera une exception.

Il s'est passé au moins trois fois en deux mois dans un système à faible charge. Redémarrer SQL Server résout la situation, mais je ne considère pas cela comme une «solution» au problème.

J'ai recherché des informations et trouvé quelque chose à propos de la corruption du cache de requêtes. Cependant, c'était en ce qui concerne les chaînes SQL dynamiques, ce qui n'est pas mon problème. Je suppose que cela pourrait toujours être le cache de requête.

Quelqu'un at-il eu le même problème, et si oui, qu'avez-vous fait à ce sujet (ne dites pas "redémarrer SQL Server tous les matins";))? Y at-il un moyen de déboguer le problème pour essayer de trouver exactement quoi et où les choses vont mal? Je ne peux pas recréer le problème, mais quand il apparaîtra à nouveau ce serait bien si je savais où regarder de plus près.

Je ne pense pas que cela fasse une différence, mais juste pour l'enregistrement, le SPROC est appelé à partir du code .NET 3.5, en utilisant le Entity Franework. Je dis que cela ne fait pas de différence, car lorsque j'ai testé simplement exécuter SPROC directement à partir de SQL Server Management Studio, aucun résultat n'est renvoyé non plus.

Répondre

2

Il est le paramètre le plus probable renifler

serveur SQL Redémarrage efface le cache de plan. Si vous reconstruisez des statistiques ou des index le problème également aller « ALTER INDEX » et « sp_updatestats »

Je suggère d'utiliser « masquage des paramètres » (pas RECOMPILE!) Pour contourner

répondre SO déjà par moi :

+0

Je vais regarder dans cela. Est-ce que cela devrait être fait comme une tâche programmée tous les soirs?La reconstruction des index et la mise à jour des statistiques avant chaque requête ne sont pas une solution réalisable. :) –

+1

oui comme meilleure pratique. ça va encore arriver, mais c'est un bon test pour le reniflage des paramètres car le plan stocké est invalidé par les mises à jour statistiques – gbn

+0

Juste pour m'assurer que je comprends tout ici: Donc le problème peut encore se produire, mais il va se "résoudre" reconstruit? Je sens que j'ai quelques lectures à faire. :) –

2

Vos STATISTIQUES sont-ils à jour? L'une des causes courantes d'un plan de requête en cache incorrect est celle des statistiques obsolètes.

Avez-vous un travail de reconstruction d'index planifié régulièrement?

+0

index - probablement. Satatistics - aucune idée. Je n'ai pas construit la base de données, donc je vais devoir regarder de plus près. Merci pour les conseils. –

0

Avez-vous vérifié le journal SQL Server ..? Defenetly la cause du problème a été enregistrée .. Au moins, vous pouvez obtenir un indice à ce sujet. SVP vérifier cela.

Cet excellent article MSDN SQL Server technical bulletin - How to resolve a deadlock explique les étapes nécessaires pour identifier et résoudre les problèmes de blocage dans les moindres détails.