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.
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: