2010-06-03 3 views
1

Il y a le code suivant:Que montre le plan d'exécution SQL Server?

declare @XmlData xml = 
'<Locations> 
<Location rid="1"/> 
</Locations>' 

declare @LocationList table (RID char(32)); 
insert into @LocationList(RID) 
select Location.RID.value('@rid','CHAR(32)') 
from @XmlData.nodes('/Locations/Location') Location(RID) 

insert into @LocationList(RID) 
select A2RID from tblCdbA2 

Tableau tblCdbA2 a 172810 lignes.

J'ai exécuté le lot dans SSMS avec "Inclure le plan d'exécution réel" et exécuter le profileur. Le plan montre que le coût de la première requête est de 88% par rapport au lot et le second de 12%, mais le profileur indique que les durées des première et deuxième requêtes sont respectivement de 17 ms et de 210 ms, le temps total étant de 229. , ce qui n'est pas 12 et 88 .. Que se passe-t-il? Existe-t-il un moyen de déterminer dans le plan d'exécution quelle est la partie la plus lente de la requête?

Répondre

2

Durée! = Coût.

Le coût comprend d'autres facteurs, tels que la création et les objets libérant (comme votre XML Lire avec filtre XPath), utilisation de la mémoire, écrit, lit, accès à la table temporaire, etc.

Edit:

Regardez votre plan d'exécution, et survolez les parties qui "coûtent" le plus. Dans votre cas, cela "coûte" le plus au serveur (temps de compilation, temps de processeur, temps de mémoire, etc.) pour créer et exécuter la fonction de lecture de tableau XML et de filtre.

Une autre chose à essayer est d'utiliser votre SQL Server Profiler, et de surveiller les événements "Showplan All", et "Showplan XML". Vous pouvez obtenir les mêmes vues que le plan d'exécution en cliquant sur l'événement "Showplan XML" dans le profileur, et obtenir des détails supplémentaires en cliquant sur l'événement "Showplan All".

Voici un bon article qui traite de ces événements:

Capturing Graphical Query Plans with SQL Server Profiler

+0

grands, mais cela signifie que le coût ne vous dit rien si la requête est mauvaise ou bonne? Et existe-t-il un moyen de déterminer dans le plan d'exécution quelle est la partie la plus lente de la requête? – Tim

Questions connexes