Serveur de database 100%, sans raison

Nous avons Windows Server 2003 (x64) en cours d'exécution en tant que server de database. La database est équipée de 32 Go de RAM

Généralement, l'utilisation de la memory de database (gestionnaire de tâches) est comprise entre 5 et 10%. Cependant, parfois la database prend soudainement 100% et rest là, de manière random et sans aucun changement de code ou d'exécution.

Toutes sortes de searchs, payées ou par moi, ont pointé vers une seule procédure stockée. Lorsque la database est 100%, la désactivation de cette procédure ramènera la database à la normale.

Maintenant, cela semble assez évident, mais voici la partie étrange.

La procédure stockée est optimisée et l'utilisation de la memory (à partir du plan d'exécution) est de 0,01, ce qui est extraordinairement bon. Normalement, l'exécution de la procédure stockée returnnera le résultat instantanément. J'ai également payé un administrateur de support de support de RackSpace Fanatic pour examiner ceci, et il a dit qu'il ne voit aucun problème avec la procédure stockée.

Maintenant, le bit supplémentaire wierd.

  • L'exécution du SP est instantanée.
  • Lorsque DB est à 100%, exécute le SP, continue à s'exécuter pendant des minutes et des minutes.
  • Désactivation du SP, envoie le DB à 5-10%.
  • Bien que le SP soit activé, DB est 100%, si j'ouvre une nouvelle window de requête et exécute le code EXACT à partir du SP, mais en tant que requête, pas en tant que SP, les résultats sont returnnés INSTANTANÉMENT à nouveau

Donc, même si à première vue, il semble que le SP a besoin d'optimization, le code réel dans le SP n'est pas un problème.

Je suis désespérée!

Le plan d'exécution peut changer en fonction des parameters d'input du SP et de la taille de l'set de résultats.

Vous pouvez essayer d'append WITH RECOMPILE à la procédure stockée pour get un nouveau plan d'exécution pour chaque appel. Cela ralentira un peu, mais parfois SQL Server rest bloqué avec un plan d'exécution inhabituellement mauvais pour la majorité des requêtes et une recompilation aide dans ces scénarios.

Profiler

SQL Server est livré avec un excellent outil appelé Profiler qui vous permet de voir en time réel les requêtes qui s'exécutent sur le server. Vous devriez lancer le profileur et découvrir ce qui se passe réellement et l'utiliser pour find le coupable.

Il y a 4 mesures pour les requêtes: memory, CPU, lectures, écritures. Les instructions SQL qui en prennent beaucoup (individuellement ou combinées) et qui sont appelées à haute fréquence sont les meilleurs candidats pour l'optimization.

Une fois que vous avez exécuté le profil et capturé la sortie, vous devriez être en mesure d'identifier les éléments à optimiser. Vous pouvez ensuite exécuter les instructions SQL, revoir les plans d'exécution et effectuer l'optimization nécessaire.

(modifier: contenu ajouté)

Il se pourrait que ce ne soit pas l'instruction elle-même qui ne soit pas optimale, mais quelques lockings / blocages / interblocages qui pourraient causer cela. Il peut y avoir quelque chose d'autre fonctionnant sur le server en même time qui prend les ressources nécessaires pour ce SP et cause le pic dans le CPU.

Lisez sur Profiler:

http://msdn.microsoft.com/en-us/library/ms187929.aspx