Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Server: Performance-Optimierung

Ausführungspläne und Live Statistics

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Erfahren Sie, was Ausführungspläne und die Live Statistics sind und wie diese Instrumente verwendet werden können.
07:42

Transkript

Das Nächste, was ich Ihnen zeigen möchte, sind Ausführungspläne und Live Statistics. Das bedeutet, wenn Sie die Frage umtreibt, "Wie führt der SQL Server denn überhaupt meine Abfrage aus?", dann kann ich mich entsprechend den Ausführungsplänen oder der Live-Sicht sozusagen hingeben und dort analysieren. Das ist für sich ein riesengroßer Komplex. Ich möchte Ihnen jetzt hier einfach nur so die ersten Schritte mitgeben damit Sie ungefähr eine Idee haben, wie man dem SQL Server ein bisschen bei seiner Arbeit auf die Finger schauen kann. Und wie Sie mit den Ausführungsplänen am besten beginnen können, zeige ich Ihnen auch direkt live hier im SQL Server Management Studio. Ich habe dafür eine neue Abfrage aufgemacht. Sie haben hier oben unterschiedliche Schaltflächen, die alle so ein bisschen ähnlich aussehen. Sie haben hier die Möglichkeit, den tatsächlichen Ausführungsplan Ihres Statements sich anzuzeigen. Das heißt, das ist das, was er wirklich ausgeführt hat. Das steht nur zur Verfügung, wenn er das Statement oder die Statements auch wirklich ausführen konnte. Dann habe ich hier die Möglichkeit, mir einen geschätzten, Estimated Execution Plan anzeigen zu lassen und das ist der, den er höchstwahrscheinlich benutzen würde, würden Sie das Statement, das Sie da haben, tatsächlich jetzt auch ausführen. Und es gibt die Möglichkeit, sich die Live Query Statistics anzuschauen. Das bedeutet, ich gucke dem SQL Server bei der Arbeit zu und weiß dann entsprechend, wie weit er schon ist mit dem ein oder anderen Statement. Das ist manchmal ganz gut, wenn ich längere Statements ausführe. Dann kommt man irgendwann zum Punkt, wo man nicht genau weiß, sollte ich abbrechen, sollte ich nicht abbrechen? Lohnt es sich noch zu warten oder nicht? Und das kann man damit möglicherweise ganz gut erfahren. So, fangen wir an. Wir brauchen erstmal ein Statement. Wir nehmen dafür wieder eine Abfrage auf die entsprechende Tabelle. Ich nehme einfach mal hier den Heap und könnte hingehen so einfach mal rüberziehen und sagen "select * from" "[dbo].[ ProduktverzeichnisHeap]" "where ID= 1234567". Das lasse ich einmal ausführen und klicke vorher sowohl einmal hier auf den geschätzten Ausführungsplan. Und Sie sehen, er geht davon aus, dass wenn Sie jetzt das Statement ausführen würden, dann würde er einen Tablescan machen. Das heiß, er durchleuchtet das ganze Konstrukt, also die gesamte Tabelle und sucht dann entsprechend die Zeile raus. und das ist bei Weitem der aufwendigste Teil hier an der Stelle, nämlich 99 Prozent. Und ein guter Rat kommt auch gleich mit: Er sagt nämlich hier "CREATE NONCLUSTERED INDEX" und so weiter und so fort. Das heißt, da krieg ich direkt einen Hinweis, was ich denn wirklich anlegen könnte. Das Flackern übrigens kommt nicht von der Videoaufzeichnung hier, sondern in der Tat, das Management Studio schafft es das nicht richtig darzustellen, das ist eine etwas seltsame Geschichte. So, jetzt könnte ich hingehen und das gleiche Statement nochmal laufen lassen. Auf die Variante, die ich mit dem "CllusteredColumnstoreIndex" habe. So, den benutze ich auch einmal. Ich bin faul und will mich nicht vertippen. Das heißt, paste das da rein, führe, remarkiere das, führe dann nochmal einen Klick auf diese Schaltfläche aus. Und Sie sehen auch hier, er rät mir wieder, einen Index anzulegen. Es würde immerhin 97 Prozent bringen. Geben wir ihm doch mal etwas, wo auch in der Tat mal ein Index drauf ist, den er benutzen kann. Dann möchte ich nämlich keinen Scan sehen, wie hier, ColumnstoreIndex-Scan macht er, aber ich möchte auch einmal einen Seek sehen. Das heißt, ich versuche beispielsweise mal einen Zugriff auf diese Tabelle. Drücke hier drauf und in der Tat, er zeigt mir an, ja, es ist so, dass er einen Seek durchführt, das heißt, er benutzt hier den Index in der Tat mal. Das sind allerdings nur geschätzte Werte, das heißt, Sie bekommen sofort, wenn Sie hier ein Statement haben das entsprechend markieren oder einfach keine Markierung haben, auf die Schaltfläche klicken, dann macht er das auch für eine Batch und zeigt dann auch gleichzeitig an, welchen Index er vorschlagen würde. Aber das sind alles nur geschätzte Werte, das heißt, die hat er nicht wirklich in der Tat so ausgeführt. Wenn ich dann hingehe und zum Beispiel den tatsächlichen Ausführungsplan markiere, und dann, wie in dem Beispiel vorher Statement für Statement ausführe, dann bekomme ich diesen Execution Plan erst dann, wenn das Statement wirklich gelaufen ist. Dann sehen Sie hier, es ist relativ ähnlich zum dem, was er vorhin vermutet hat. Da lag er schon mal ganz gut an der Stelle. Ich kann jetzt mal versuchen, wie es mit dem ClusteredColumnstoreIndex aussieht. Auch das ist relativ ähnlich und last but not least sollte auch das in der Tat wirklich genau dem entsprechen, was wir gerade gesehen haben. Es ist aber nicht immer so, dass der geschätzte und der tatsächliche Ausführungsplan identisch sind, da kann es Unterschiede geben. Der geschätzte Ausführungsplan ist quasi nur anhand der Statistiken. Wenn Sie jetzt das Statement ausführen, würde ohne wirklich loszulaufen ohne möglicherweise die ein oder anderen Analyse durchzuführen, würde er so ausführen und der tatsächlich ist quasi das Resümee, wie er es letztendlich dann in der Tat gemacht hat. Das liegt sehr häufig sehr nahe, muss aber nicht wirklich identisch sein. So, dann kann ich, wenn ich möchte mir auch die Live Statistics angucken. Das wäre diese Schaltfläche hier. Problem ist nur, wenn ich das jetzt hier ausführe, das geht so schnell, da sieht man nicht wirklich was. Das sieht genauso aus, wie das Ergebnis von gerade. Naja nicht ganz, aber im großen und Ganzen schon. Deshalb habe ich hier eine zweite Abfrage. Und die macht im Wesentlichen erst einmal nichts anderes, als dass es ein Statement ausführt was wir, "CROSS JOIN", eine Tabelle dieses Objects, da sind einfach eine ganze Menge interne Objekte drin, entsprechend mit sich selber in einem kartesischen Produkt verjoinen. Und wenn ich das laufen lasse, dann sehen Sie, es dauert eine Weile, bis es fertig ist. Ich stoppe das jetzt nochmal, dann schalte ich auch für das Abfragefenster die Live Statistics ein. Und Sie sehen, ich ziehe das mal ein bisschen größer, können dann also sehen, wie weit er mit welchem Statement schon ist. Mit welchem Schritt genauer gesagt, nicht mit welchem Statement, sondern mit welchem Schritt. Und Sie sehen, dieser CROSS JOIN über mehrere Tabellen ist schon relativ aufwendig. Da passiert eine zeitlang was. Allerdings nach 23 Sekunden ist er auch damit fertig. Und letztendlich habe ich dann gesehen, wie er das in der Tat ausführt, beziehungsweise ist noch gar nicht fertig, es hat nur eine kleine Verzögerung gegeben. Und letztendlich bekomme ich dann hier einen Blick auf die Ausführung. Sie sehen aber schon, ein Nachteil, bei sehr aufwendigen Ausführungsplänen und da ist man relativ schnell dabei, wird es relativ unübersichtlich. Da gibt es einfach nur eins: Eine riesen Auflösung, dass man sich so ein bisschen zurechtfindet. Ich kann auch hier unten, wenn er mich denn lässt, hier drauf klicken und dann kann ich so ein bisschen in diese Ansicht navigieren. Aber so etwas richtig Schönes kann das Management Studio Ihnen da leider nicht bieten. Generell aber, Sie können sich die einzelnen Schritte anschauen. Sie sehen, dass immer wieder ein Detailfenster hochpoppt an der Stelle. Das zeigt mir dann nochmal sehr detailliert an, was denn in der Tat wirklich hier ausgeführt wird und zeigt an, wieviel IO-Kosten, wieviel CPU-Kosten und so weiter und so fort anfallen. Und letztendlich, Sie sehen der Fluss geht so von rechts nach links. und irgendwann ganz links oben habe ich dann das Ergebnis. Also es läuft alles von rechts nach links in dem Fall, an der Stelle.

SQL Server: Performance-Optimierung

Lernen Sie den Umgang mit Indizis und Tools, um die Leistungsfähigkiet Ihrer SQL Server Datenbank effektiv zu erhöhen.

3 Std. 20 min (32 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:04.05.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!