Les pourcentages de coût dans ce plan SQL Server sont-ils supérieurs à 100% pour une raison valable?

13

Je regarde dans le cache du plan, à la recherche de fruits d'optimisation bas et suis tombé sur cet extrait:

entrez la description de l'image ici

Pourquoi plusieurs des coûts énumérés ci-dessus sont-ils à 100%? Cela ne devrait-il pas être impossible?

Max Vernon
la source
J'ai même vu des coûts allant jusqu'à 1 million% par rapport au plan estimé. Utilisez simplement le coût réel, cela devrait être mieux.
Marian
5
Parce que les calculs de SQL Server sont foirés. Prenez notre explorateur de plans gratuit ; nous n'avons pas ce problème.
Aaron Bertrand
J'aime SQL Sentry Plan Explorer, Aaron - je l'utilise depuis un moment maintenant. Je veux voir ce que fait la version pro!
Max Vernon

Réponses:

12

L'estimateur visuel des coûts est de la merde. Ce genre de choses arrive tout le temps. Il suffit d'aller avec les plus élevés qui sont les plus chers et d'attaquer ceux-là en premier.

mrdenny
la source
Avez-vous déjà vu cela avec des versions précédentes de SQL Server? En ce qui me concerne, je ne l'ai jamais remarqué sur SS 2008R2 par exemple.
KookieMonster
5
Je l'ai vu depuis SQL 2000. Pour autant que je sache, ce n'est qu'un bug dans SSMS (et EM) quand il fait le calcul pour comprendre les pourcentages.
mrdenny
2

J'étais également curieux de savoir pourquoi parfois certains coûts sont affichés à 100%, 200%, 300% ... et même plus. Après avoir analysé le fichier xml du plan de requête, je l'ai eu.

Le pourcentage de coût = mon EstimatedTotalSubtreeCostnœud / parentEstimatedTotalSubtreeCost

Par exemple, votre plan de requête affiche Clustered Index Insertun coût de 914%, pour comprendre comment il calcule ce pourcentage, 1. Move mouse to `Clustered Index Insert` to show popup, you can see the cost `EstimatedTotalSubtreeCost`, e.g, 0.2 2. Move mouse to this node's parent node `COND WITH QUERY`, check the popup to get `EstimatedTotalSubtreeCost`, e.g, 0.0218818 3. Calculate 0.2/0.0218818 = 914%, this is the cost percentage displayed in `Clustered Index Insert` popup

osexp2003
la source
1
0.002/2.18est 0.000917(qui est le même que 0.0917%) et non 914%.
ypercubeᵀᴹ
Merci pour votre commentaire. Je modifierai ma réponse. Après tout, ce n'est qu'un échantillon pour montrer comment calculer le pourcentage.
osexp2003