Wie lese ich die Abfragekosten und gibt es immer einen Prozentsatz?

34

Derzeit lerne ich SQL 70-433 (Microsoft-Zertifizierungsprüfung) und bin hinsichtlich der Leistungsmetrik "Abfragekosten" sehr verwirrt.

Nach einer Dokumentation, die ich über Google finden konnte, handelt es sich bei den Abfragekosten um einen Prozentsatz, der den Prozentsatz des gesamten Stapels darstellt, den ein Teil davon in Anspruch nimmt. Dies erschien mir schon ein wenig seltsam, da ich eher am absoluten Wert einer bestimmten Abfrage interessiert bin, als an ihrem Wert im Vergleich zu anderen Abfragen, die zufällig daneben erscheinen.

Aber dann dachte ich, nun, was von Ihnen erwartet wird, ist, zwei alternative Abfragen nebeneinander zu platzieren, sie als "Batch" auszuführen und dann zu gewinnen, welche weniger als 50% kosten.

Die Erörterung der Abfragekosten in Kapitel 6, Lektion 1 des SQL 70-433-Trainingskits von Microsoft, scheint jedoch keine Beziehung dazu zu haben.

Hier ein Beispiel: Sie zeigen eine Abfrage, die zwei korrelierte Unterabfragen enthält, und verbessern diese dann, indem sie die Unterabfragen durch eine OUTER APPLY ersetzen. Das Ergebnis: "Diese Abfrage hat Kosten von ungefähr 76, während die Kosten der ersten Abfrage doppelt so hoch waren, ungefähr 151." Sie verbessern dann die Abfrage noch weiter und senken die Kosten von 76 auf 3,6. Sie implizieren nicht, dass es sich bei diesen Zahlen um Prozentsätze handelt, während es sich um absolute Zahlen handelt, die sich auf die Abfrage als eigenständiges Objekt beziehen, ohne dass auf andere Abfragen verwiesen wird. Und wie könnte die erste Abfrage 151% kosten?

Später in diesem Kapitel zeigen sie einen Screenshot eines Ausführungsplans, der aus drei Teilen besteht. Der erste sagt "Kosten: 0%", der zweite sagt "Kosten: 1%" und der letzte sagt "Kosten: 99%", aber der Text (des Buches selbst) unter dem Screenshot "Die Kosten für diese Abfrage betragen 0,56". . Ich vermute, dass sie eine andere Art von Kosten bedeuten, aber ich kann an anderer Stelle keinen Hinweis darauf finden.

Kann jemand helfen? Ich bin sehr verwirrt.


quelle
PS Angenommen, sie beziehen sich auf etwas anderes als die in den Ausführungsplänen angegebenen Prozentsätze. Wie kann SSMS mir die von ihnen angegebenen Zahlen anzeigen? Benötige ich etwas wie SET STATISTICS TIME ON, aber mit einem anderen Befehl, der mir eine "Kosten" -Zahl auf der Registerkarte Messages anzeigt?

Antworten:

43

Die Abfragekosten werden in Ausführungsplänen als "geschätzte Teilbaumkosten" angegeben. Dies ist eine absolute Zahl wie 1.5. Conor Cunningham erwähnte in einer SQLBits-Präsentation, dass es sich ursprünglich auf die Anzahl der Sekunden bezog, die für die Ausführung auf dem Computer eines bestimmten Microsoft-Mitarbeiters ( "Nick's Machine" ) in den SQL Server-7-Tagen benötigt wurden

Bildbeschreibung hier eingeben

Jetzt sollte es jedoch als ein einheitloses Maß für die Gesamtkosten interpretiert werden.

Der Ausführungsplan ist ein Baum. Jedem Iterator in der Struktur werden geschätzte CPU-Kosten und geschätzte E / A-Kosten zugewiesen . Diese werden zu den Gesamtkosten addiert (die relativen Gewichtungen können mit einigen undokumentierten DBCC-Befehlen angepasst werden ). Die geschätzten Teilbaumkosten umfassen die Kosten für den Iterator selbst und alle seine Nachkommen. Ein Beispiel für die verwendeten Kalkulationsformeln finden Sie in diesem Artikel .

Um die geschätzten Kosten für eine gesamte Abfrage in SSMS zu ermitteln, wählen Sie den Root-Iterator (z. B. den SELECTIterator) links vom grafischen Plan aus und sehen Sie sich diese Metrik im SSMS-Eigenschaftenfenster an.

Bei der Ausführung mehrerer Abfragen (ob im selben Stapel oder nicht) wird der Prozentsatz berechnet, indem alle diese Werte addiert und der erwartete Prozentsatz berechnet wird.

Sie sollten sich darüber im Klaren sein, dass selbst in tatsächlichen Ausführungsplänen diese Kostenzahl auf Schätzungen basiert und dass der Vergleich der relativen Vorzüge zweier verschiedener Abfragen in Fällen, in denen die Schätzungen ungenau sind, durchaus falsch sein kann.

Martin Smith
quelle
Danke, das ist sehr hilfreich. Und überhaupt nicht offensichtlich! Ich frage mich, warum diese Zahl nicht deutlicher hervorgehoben wird.
4
Ich habe mich immer über die Maßeinheit gewundert und war froh, es endlich herauszufinden. Ich habe es Leuten (komisch) erklärt, dass es "SQL Dollars" ist. Wenn die Abfragekosten 1,0 betragen, entspricht dies dem Bezahlen von 1 Dollar für eine Tasse Kaffee. Kein schlechter Preis. Würden Sie 300 Dollar für eine Tasse bezahlen? Auf keinen Fall!
Datum