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?


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.


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.