Ein Abfrageplan ist eine Darstellung der Schritte, die von der Datenbank-Engine ausgeführt werden, um eine Abfrage auszuführen. Diese Schritte umfassen das Scannen von Tabellen, das Filtern von Daten, das Sortieren von Ergebnissen und vieles mehr. Der Abfrageplan kann dabei helfen, Engpässe in der Datenbankabfrage zu erkennen und mögliche Optimierungen vorzuschlagen. In diesem Artikel werde ich erklären, wie man einen Abfrageplan im MS SQL Server analysieren kann.

Schritt 1: Einen Abfrageplan generieren Bevor wir einen Abfrageplan analysieren können, müssen wir zunächst einen generieren. Dazu können wir entweder die Abfrage direkt in SQL Server Management Studio eingeben oder eine bereits vorhandene Abfrage auswählen. Klicken Sie dann auf “Include Actual Execution Plan”, um den Abfrageplan zu generieren.

Schritt 2: Den Abfrageplan untersuchen Sobald der Abfrageplan generiert wurde, können wir ihn untersuchen. Der Abfrageplan besteht aus einer Baumstruktur, die die einzelnen Schritte der Abfrage darstellt. Jeder Knoten im Baum repräsentiert eine Operation, die von der Datenbank-Engine ausgeführt wird.

Beginnen wir mit dem Wurzelknoten des Baums. Dieser repräsentiert die gesamte Abfrage. Wenn Sie auf den Knoten klicken, können Sie die Eigenschaften der Abfrage anzeigen, wie die Anzahl der betroffenen Zeilen, die benötigte CPU-Zeit und die Gesamtdauer der Abfrage.

Als nächstes betrachten wir die einzelnen Knoten des Baums. Diese repräsentieren die Operationen, die von der Datenbank-Engine ausgeführt werden, um die Abfrage auszuführen. Einige häufige Knoten sind:

  • Scan: Dieser Knoten repräsentiert das Scannen einer Tabelle oder eines Indexes. Wenn die Anzahl der gescannten Zeilen hoch ist, kann dies ein Hinweis darauf sein, dass die Abfrage optimiert werden muss.
  • Filter: Dieser Knoten repräsentiert das Filtern von Zeilen basierend auf einem bestimmten Kriterium. Wenn die Anzahl der gefilterten Zeilen hoch ist, kann dies ein Hinweis darauf sein, dass die Abfrage optimiert werden muss.
  • Sort: Dieser Knoten repräsentiert das Sortieren von Zeilen basierend auf einem bestimmten Kriterium. Wenn die Anzahl der sortierten Zeilen hoch ist, kann dies ein Hinweis darauf sein, dass die Abfrage optimiert werden muss.
  • Join: Dieser Knoten repräsentiert das Zusammenführen von Zeilen aus zwei oder mehr Tabellen. Wenn die Anzahl der gejointen Zeilen hoch ist, kann dies ein Hinweis darauf sein, dass die Abfrage optimiert werden muss.

Schritt 3: Identifizieren von Engpässen Sobald wir den Abfrageplan untersucht haben, können wir Engpässe identifizieren, die die Leistung der Abfrage beeinträchtigen können. Ein Engpass kann durch einen Knoten im Baum repräsentiert werden, der entweder viel Zeit benötigt oder viele Ressourcen verbraucht.

Um einen Engpass zu identifizieren, können wir die folgenden Eigenschaften des Knotens überprüfen:

  • Estimated subtree cost: Dies ist eine Schätzung der Gesamtkosten aller Operationen unterhalb dieses Knotens. Ein höherer
  • Wert deutet darauf hin, dass dieser Knoten viel Zeit und Ressourcen benötigt.
  • Actual number of rows: Dies ist die tatsächliche Anzahl von Zeilen, die vom Knoten verarbeitet werden. Eine Abweichung von der geschätzten Anzahl kann ein Hinweis darauf sein, dass die Statistiken der Tabelle aktualisiert werden müssen.
  • Execution time: Dies ist die Zeit, die der Knoten benötigt, um ausgeführt zu werden. Ein hoher Wert kann ein Hinweis darauf sein, dass dieser Knoten optimiert werden muss.

Schritt 4: Optimierung der Abfrage Sobald wir Engpässe identifiziert haben, können wir versuchen, die Abfrage zu optimieren, um die Leistung zu verbessern. Hier sind einige mögliche Optimierungen:

  • Indizes hinzufügen: Durch Hinzufügen von Indizes auf die verwendeten Spalten können wir das Scannen von Tabellen reduzieren und die Leistung verbessern.
  • Abfrage umschreiben: Durch Umschreiben der Abfrage können wir die Anzahl der gescannten Zeilen oder die Anzahl der gefilterten Zeilen reduzieren und somit die Leistung verbessern.
  • Tabellen partitionieren: Durch Partitionieren von Tabellen können wir die Abfrage auf kleinere Teile aufteilen und somit die Leistung verbessern.
  • Statistiken aktualisieren: Durch Aktualisieren der Statistiken der Tabelle können wir sicherstellen, dass die Abfrageplanung korrekte Schätzungen liefert und somit die Leistung verbessert.

Fazit: Die Analyse eines Abfrageplans ist ein wichtiger Schritt, um Engpässe in der Datenbankabfrage zu identifizieren und mögliche Optimierungen vorzuschlagen. Durch das Verständnis der Baumstruktur des Abfrageplans und der Eigenschaften der einzelnen Knoten können wir Engpässe identifizieren und die Abfrage optimieren, um die Leistung zu verbessern.

Von Michael