Geschätzter Microsoft SQL Server im Vergleich zu tatsächlichen Ausführungsplänen

Nehmen wir an, Sie bauen ein neues Haus und haben einen Vertrag mit einem Bauunternehmer. Nach eingehender Prüfung der Fläche, der Höhe und der benötigten Materialien schätzt er, dass es 120 Tage dauern wird, um ein neues Zuhause zu bauen. Nach dem Bau des Hauses hat es tatsächlich 200 Tage gedauert, bis es gebaut wurde.

Es gibt einen Unterschied zwischen seiner Einschätzung und dem tatsächlichen Ergebnis. Dies gilt auch für Abfrageausführungspläne in SQL Server, insbesondere die geschätzten vs. tatsächlichen Ausführungspläne.

Dieses Tutorial enthält eine Geschätzter Ausführungsplan sowie ein Tatsächlicher Ausführungsplan in SQL Server.

Geschätzte vs. tatsächliche Ausführungspläne: Was ist ein Ausführungsplan?

Der Ausführungsplan ist der Versuch eines Abfrageoptimierers, die kostengünstigste und effizienteste Methode zum Ausführen einer T-SQL-Abfrage zu finden. Zum Erstellen eines Ausführungsplans verwendet der SQL Server verschiedene Algorithmen, Statistiken, Permutationen und Kombinationen von Joins und Indizes, um einen effizienten Ausführungsplan für eine Abfrage zu erstellen.

Der Abfrageoptimierer versucht immer, einen Ausführungsplan zu erstellen, der die Abfrage mit weniger CPU- und E / A-Auslastung schneller ausführen kann.

Es kann zeigen, dass eine Tabelle aufgrund eines fehlenden Index einen Tabellenscan durchführt. Um mit Leistungsproblemen zu beginnen, müssen wir uns meistens den Ausführungsplan ansehen, um eine allgemeine Vorstellung davon zu bekommen, wo die Abfrage hinterherhinkt.

Geschätzter Ausführungsplan

1. Ein geschätzter Ausführungsplan wird generiert, ohne die Abfrage tatsächlich auszuführen. Es basiert auf verfügbaren Statistiken zu Indizes.

2. Geschätzte Ausführungspläne werden vom Abfrageoptimierer ausgegeben. Daher wird es als logischer Plan betrachtet.

3. Der geschätzte Ausführungsplan stimmt immer mit dem tatsächlichen Ausführungsplan überein. Er kann jedoch aufgrund von nicht aktualisierten Statistiken, Änderungen in der zugrunde liegenden Tabellenstruktur, umfangreichen Einfüge- / Lösch- / Aktualisierungsoperationen, fehlenden Indizes und anderen Faktoren abweichen.

4. Es kann fehlschlagen, einen geschätzten Ausführungsplan zu erstellen, wenn für eine Prozedur temporäre Tabellen oder Tabellenvariablen erstellt werden. Da eine geschätzte Planabfrage nicht ausgeführt wird, werden temporäre Tabellen bei der Erstellung eines geschätzten Ausführungsplans nicht berücksichtigt.

Aktueller Ausführungsplan

1. Nach Ausführung der Abfrage wird ein tatsächlicher Ausführungsplan generiert. Es ist informativer und zuverlässiger, da es auf der tatsächlichen Ausführung und nicht auf geschätzten Statistiken basiert.

2. Die Erstellung eines tatsächlichen Ausführungsplans kann mehr Zeit in Anspruch nehmen, wenn Ihre Abfrage komplex ist, da die Abfrage ausgeführt werden muss, um einen Plan zu erstellen. Wenn Sie eine komplexe Abfrage haben, sollten Sie zuerst den geschätzten Plan überprüfen.

3. Das Arbeiten mit einem tatsächlichen Ausführungsplan ist zuverlässig bei der Behebung von leistungsbezogenen Problemen, da uns die tatsächlichen und richtigen Informationen zur Verfügung stehen.

Einen geschätzten Ausführungsplan erhalten

Es stehen verschiedene Optionen zur Verfügung, um einen geschätzten Ausführungsplan zu erstellen.

1. Wählen Sie eine Abfrage aus. Klicken Sie mit der rechten Maustaste auf ein Abfragefenster und wählen Sie aus Geschätzten Ausführungsplan anzeigen.

2. Klicken Sie auf Geschätzten Ausführungsplan anzeigen Option in der Hauptsymbolleiste.

3. Wählen Sie eine Abfrage aus und drücken Sie STRG + L Tastenkombination.

Einen tatsächlichen Ausführungsplan erhalten

1. Klicken Sie auf das Tatsächlicher voraussichtlicher Ausführungsplan Option in der Hauptsymbolleiste.

2. Wählen Sie eine Abfrage aus und drücken Sie STRG + M Tastenkombination.

Beispiel:

Ein geschätzter Plan kann nicht für Abfragen mit temporären Tabellen abgerufen werden, da eine Abfrage tatsächlich von der Abfrage-Engine ausgeführt wird, um den geschätzten Ausführungsplan abzurufen.

Wählen Sie die Abfrage aus. Klicken Sie auf Geschätzten Ausführungsplan anzeigen, und Sie erhalten einen Fehler.

Ungültiger Objektname '#TempTable'.

USE master SELECT * INTO #TempTable FROM master… spt_values; select * from #TempTable; 

Weitere Informationen zu Datenbank- und SQL-Programmierung finden Sie unter Tech-Recipes.