it-swarm.com.de

Wie lese ich die Abfragekosten und ist dies immer ein Prozentsatz?

Ich lerne derzeit für SQL 70-433 (die Microsoft-Zertifizierungsprüfung) und bin sehr verwirrt über die Leistungsmetrik "Abfragekosten".

Gemäß jeder Dokumentation, die ich über Google finden konnte, sind die Abfragekosten ein Prozentsatz und stellen den Prozentsatz des gesamten Stapels dar, der von einem Teil davon in Anspruch genommen wird. Dies erschien mir bereits etwas seltsam, da ich eher am absoluten Wert einer bestimmten Abfrage als an ihrem Wert im Vergleich zu anderen Abfragen interessiert bin, die zufällig daneben erscheinen.

Aber dann dachte ich, nun, vielleicht wird von Ihnen erwartet, dass Sie zwei alternative Abfragen nebeneinander stellen, sie als "Stapel" ausführen, und dann ist derjenige der Gewinner, der weniger als 50% kostet.

Die Erörterung der Abfragekosten in Kapitel 6, Lektion 1 des Microsoft SQL 70-433 Training Kit scheint jedoch keinen Zusammenhang damit zu haben.

Hier ein Beispiel: Sie zeigen eine Abfrage, die zwei korrelierte Unterabfragen enthält, und verbessern sie dann, indem sie die Unterabfragen durch eine AUSSENANWENDUNG ersetzen. Das Ergebnis: "Diese Abfrage kostet 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 diese Zahlen Prozentsätze sind, während sie implizieren, dass es sich um absolute Zahlen handelt, die sich auf die Abfrage als eigenständiges Objekt beziehen, ohne auf andere Abfragen Bezug zu nehmen. Und wie könnte die erste Abfrage überhaupt 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 dieser Abfrage betragen 0,56". . Ich vermute, dass sie eine andere Art von Kosten bedeuten, aber ich kann anderswo keinen Hinweis darauf finden.

Kann jemand helfen? Ich bin völlig verwirrt.

34

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 er 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 SQL Server 7 benötigt wurden Tage

enter image description here

aber jetzt sollte als ein einheitloses Maß für die Gesamtkosten interpretiert werden.

Der Ausführungsplan ist ein Baum. Jeder Iterator im Baum erhält geschätzte CPU-Kosten und geschätzte IO Kosten und diese werden addiert, um die Gesamtkosten zu erhalten (die relativen Gewichtungen können mit einem Paar von) angepasst werden undokumentierte DBCC-Befehle ). Die geschätzten Teilbaumkosten enthalten die Kosten für den Iterator selbst und alle seine Nachkommen. Ein Beispiel für die verwendeten Kalkulationsformeln finden Sie unter dieser Artikel .

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

Wenn Sie mehrere Abfragen ausführen (ob im selben Stapel oder nicht), wird der Prozentsatz berechnet, indem Sie alle diese Werte addieren und den Prozentsatz wie erwartet berechnen.

Sie sollten sich darüber im Klaren sein, dass diese Kostenzahl auch in tatsächlichen Ausführungsplänen auf Schätzungen basiert. Wenn Sie diese zum Vergleichen der relativen Vorzüge von zwei verschiedenen Abfragen verwenden, kann dies in Fällen, in denen die Schätzungen ungenau sind, absolut falsch sein.

43
Martin Smith