Liegen die Kosten in diesem SQL Server-Plan aus einem gültigen Grund über 100%?


13

Ich durchsuche den Plan-Cache, suche nach niedrig hängenden Optimierungsfrüchten und bin auf dieses Snippet gestoßen:

Bildbeschreibung hier eingeben

Warum sind viele der Kosten über 100% aufgeführt? Sollte das nicht unmöglich sein?


Ich habe sogar Kosten von bis zu 1 Mio.% aus dem geschätzten Plan gesehen. Verwenden Sie einfach die tatsächlichen Kosten, es sollte besser sein.
Marian

5
Weil die Mathematik von SQL Server durcheinander ist. Besorgen Sie sich unseren kostenlosen Plan Explorer . Wir haben dieses Problem nicht.
Aaron Bertrand

Ich liebe SQL Sentry Plan Explorer, Aaron - ich benutze es jetzt schon eine Weile. Ich möchte sehen, was die Pro-Version macht!
Max Vernon

Antworten:


12

Der visuelle Kostenschätzer ist Mist. Diese Art von Sachen passiert die ganze Zeit. Gehen Sie einfach mit den höchsten, die am teuersten sind, und greifen Sie diese zuerst an.


Haben Sie dies jemals mit früheren Versionen von SQL Server gesehen? Ich habe es zum Beispiel auf der SS 2008R2 noch nie bemerkt.
KookieMonster

5
Ich habe es bis zu SQL 2000 gesehen. Soweit ich weiß, ist es nur ein Fehler in SSMS (und EM), wenn man die Prozentsätze berechnet.
Mrdenny

2

Ich war auch neugierig, warum manchmal Kosten in Form von 100%, 200%, 300% und mehr angezeigt werden. Nachdem ich die XML-Datei des Abfrageplans analysiert habe, habe ich sie erhalten.

Der Kostenprozentsatz = mein EstimatedTotalSubtreeCost/ übergeordneter KnotenEstimatedTotalSubtreeCost

In Ihrem Abfrageplan werden beispielsweise Clustered Index InsertKosten in Höhe von 914% angegeben, um zu verstehen, wie dieser Prozentsatz berechnet wird. 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.18ist 0.000917(was dasselbe ist wie 0.0917%) und nicht 914%.
ypercubeᵀᴹ

Danke für deinen Kommentar. Ich werde meine Antwort ändern. Immerhin ist es nur ein Beispiel, um zu zeigen, wie der Prozentsatz berechnet wird.
osexp2003
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.