Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Ausführungsplan – was ist das und wie hilft er bei Leistungsproblemen?

Ein SQL Server-Ausführungsplan ist nützlich, um Leistungsprobleme mit Ihren Abfragen zu untersuchen. Datenbankexperten erhalten häufig Trouble-Tickets oder Benutzerbeschwerden, dass Abfragen langsam ausgeführt werden. Abfrageergebnisse, die früher zwei oder drei Minuten gedauert haben, benötigen plötzlich mehr als 30 Minuten. Für die Fehlerbehebung müssen möglicherweise Bereiche wie Serverressourcen (CPU, Arbeitsspeicher), Statistiken, Festplattenleistung, Blockierung, Deadlocks und Indexe untersucht werden. In diesem Artikel konzentrieren wir uns auf die Rolle des SQL Server-Ausführungsplans bei der Lösung von Leistungsproblemen.

Was passiert, nachdem Sie T-SQL in SQL Server gesendet haben?

Sehen wir uns an, was passiert, wenn Sie eine Abfrage mit Transact-SQL oder T-SQL in SQL Server senden. Für die Nutzer macht das natürlich keinen Unterschied. Benutzer erwarten, dass sie schnell genaue Ergebnisse erhalten, egal ob sie die Datenbank abfragen oder im Internet suchen.

Der High-Level-Workflow einer SQL-Abfrage

  1. Der Benutzer authentifiziert sich bei SQL Server in einer Client-Anwendung und sendet eine Abfrage.
  2. SQL Server analysiert die Abfrage und sucht nach Syntaxfehlern.
  3. Der Analysebaum wird im Algebrizer weiter verarbeitet, der alle Objekte, Tabellen und Spalten in der Abfrage auflöst. Es führt auch eine Überprüfung der Spaltendatentypen durch. Bei Problemen wird ein Fehler zurückgegeben. Algebrizer generiert einen Abfrageprozessbaum und einen Abfragehash. Wenn der Ausführungsplan bereits vorhanden ist, verwendet SQL Server diesen zwischengespeicherten Plan und führt die Abfrage aus.
  4. Wenn kein Plan existiert oder der Plan veraltet ist, führt der Abfrageoptimierer eine vollständige kostenbasierte Optimierung mit Hilfe von Statistiken, Abfrageprozessbaum und Einschränkungen durch. Basierend auf diesen Eingaben erstellt es den kostenoptimierten SQL Server-Ausführungsplan.
  5. Schließlich führt die SQL Server-Abfrage-Engine die Abfrage gemäß dem Ausführungsplan aus und gibt die Ergebnisse zurück.

Übersicht über einen SQL Server-Ausführungsplan

Ein SQL Server-Ausführungsplan hilft Datenbankprofis bei der Fehlerbehebung bei der Abfrageleistung und beim Schreiben effizienter Abfragen. Wenn die Ausführung einer Abfrage lange dauert, kann Ihnen der SQL Server-Ausführungsplan dabei helfen, den Punkt zu ermitteln, an dem die Abfrage die meisten Ressourcen und die meiste Zeit beansprucht.

Sie können eine der folgenden Methoden verwenden, um einen Ausführungsplan zu generieren:

  1. SQL Server Management Studio
  2. Azure Data Studio
  3. SQL Server-Profiler
  4. Erweiterte Veranstaltungen
  5. Dynamische Verwaltungsansichten
  6. Datenbanküberwachungssoftware von Drittanbietern

Die von #1 bis #5 generierten Ausführungspläne sind ähnlich. Datenbanküberwachungssoftware von Drittanbietern (#6) bietet zusätzliche Funktionen, die Farbcodierung verwenden, um kostspielige Betreiber zu identifizieren.

SQL Server stellt geschätzte und tatsächliche Ausführungspläne bereit, ähnlich wie Sie es erleben, wenn Sie Ihr Auto reparieren müssen. Ein Mechaniker inspiziert Ihr Fahrzeug, dann erhalten Sie einen Kostenvoranschlag für die Arbeiten, basierend auf Ihren Anforderungen, dem Fahrzeugzustand und dem ungefähren Zeit- und Materialaufwand, den der Mechaniker für die Reparatur einschätzt. Natürlich können die tatsächlichen Kosten und der Zeitaufwand abweichen, ebenso wie bei geschätzten und tatsächlichen SQL Server-Ausführungsplänen.

Geschätzte Ausführungspläne

Ohne die Abfrage auszuführen, können Sie basierend auf den SQL Server-Statistiken einen geschätzten (logischen) SQL Server-Ausführungsplan abrufen. Gehen Sie in SQL Server Management Studio (SSMS) wie folgt vor:

  1. Markieren Sie die Abfrage (falls Sie den Ausführungsplan für eine bestimmte Abfrage möchten).
  2. Klicken Sie auf die Schaltfläche Geschätzten Ausführungsplan anzeigen (Tastaturkürzel Strg + L), wie unten gezeigt.

Manchmal ist SQL Server nicht in der Lage, einen geschätzten Plan zu erstellen; zum Beispiel, wenn ein Parameter verwendet wird, ohne seinen Wert in der Abfrage anzugeben, oder wenn keine temporäre Tabelle deklariert ist.

Tatsächlicher Ausführungsplan

Nachdem Sie die Abfrage an SQL Server gesendet haben, können Sie einen tatsächlichen Ausführungsplan abrufen, der die Schritte darstellt, die SQL Server zum Ausführen der Abfrage unternommen hat. Wie im Fahrzeugreparaturszenario ist dies die eigentliche Rechnung, die Sie erhalten.

Um den tatsächlichen Ausführungsplan abzurufen, führen Sie die folgenden Schritte in SSMS aus, bevor Sie die Abfrage ausführen.

  1. Markieren Sie die Abfrage.
  2. Klicken Sie auf Aktuellen Ausführungsplan anzeigen Schaltfläche (Tastaturkürzel Strg + M ), wie oben gezeigt.

SQL Server-Ausführungsplanformate

Standardmäßig generieren die oben erläuterten SSMS-Prozeduren einen SQL Server-Ausführungsplan im grafischen Format. Sie haben jedoch die Möglichkeit, Ausführungspläne in drei verschiedenen Formaten anzuzeigen:

  1. Grafik
  2. XML
  3. Text

Sehen wir uns jedes dieser Formate an.

1. Grafischer Ausführungsplan

Der grafische Plan zeigt alle Komponenten, einschließlich des Datenflusses, wie unten gezeigt.

Operatoren

Operatoren werden als Symbole angezeigt. Jeder Bediener ist dazu bestimmt, eine bestimmte Aufgabe auszuführen. Beispielsweise kann der Abfrageoptimierer in SQL Server einen Tabellenscan, einen Indexscan und eine Suche durchführen. So sieht ein Clustered-Index-Suchoperator aus, wenn er Daten aus einem Index in der Tabelle [AdventureWorks2019].[HumanResources] abruft:

Prozentuale Kosten

Der grafische Plan zeigt auch die prozentualen Kosten – hier 99 % für die Clustered-Index-Suche – im Zusammenhang mit dem Betreiber. Diese Kosten sind relativ zu den anderen Operatoren, die bei der Ausführung der Abfrage verwendet werden.

Datenflusspfeile

Pfeile verbinden die Operatoren, wobei ihre Breite die Anzahl der Datenzeilen widerspiegelt, die von einem Operator zum nächsten verschoben werden.

Angenommen, Ihre Abfrage generiert nur eine einzige Ausgabezeile, dauert aber sehr lange. Wenn Sie die Maus auf den Datenflusspfeil im Ausführungsplan bewegen, stellen Sie fest, dass die Anzahl der gelesenen Zeilen in die Millionen geht. Das stellt ein enormes Ungleichgewicht bei der Ressourcennutzung dar und zeigt einen Bereich auf, der optimiert werden muss.

Kurzinfos

Wie unten gezeigt, werden QuickInfos mit weiteren Statistiken zum Datenfluss angezeigt, wenn Sie mit der Maus über einen Operator fahren.

Eigenschaftenfenster

Das Eigenschaftenfenster zeigt detaillierte Informationen zu den Operatoren und ihren Komponenten an. Dies ist eine Obermenge der Tooltips.

2. XML-formatierter SQL Server-Ausführungsplan

Der XML-Ausführungsplan liegt in einem bestimmten, strukturierten Format vor. Obwohl das XML-Format visuell weniger intuitiv ist, enthält es alle Details in XML und erfordert keine zusätzlichen Schritte zum Anzeigen von Eigenschaften und QuickInfos. Sie können das XML-Format einfach in ein grafisches Format konvertieren und umgekehrt.

Um einen grafischen Ausführungsplan in das XML-Format zu konvertieren, klicken Sie mit der rechten Maustaste darauf und wählen Sie Ausführungsplan-XML anzeigen , wie unten gezeigt.

Das Ergebnis ist der folgende strukturierte Ausführungsplan im XML-Format.

Die folgenden Befehle generieren auch den Ausführungsplan im XML-Format:

  • Für den geschätzten Plan:SETZE SHOWPLAN_XML EIN
  • Für den eigentlichen Plan: SET STATISTICS_XML ON

3. Textformatierter SQL Server-Ausführungsplan

Sie können den Ausführungsplan auf verschiedene Arten generieren:

  • SHOWPLAN_TEXT EINSTELLEN

Dieser Befehl generiert die geschätzte Ausführungsplan, ohne detaillierte Informationen zur Abfrageausführung. Es ist für Anwendungen wie das Dienstprogramm sqlcmd gedacht.

  • SHOWPLAN_ALL EINSTELLEN

Dieser Befehl generiert die geschätzte Ausführungsplan, mit detaillierte Informationen zu allen Operatoren und Operationen in tabellarischer Form.

  • STATISTIKPROFIL EINSTELLEN

Dieser Befehl generiert nach der Abfrageausführung einen tatsächlichen Ausführungsplan im Tabellenformat.

Warum unterscheiden sich geschätzte und tatsächliche SQL Server-Ausführungspläne?

Geschätzte und tatsächliche Ausführungspläne sind im Allgemeinen ähnlich, obwohl einige Umstände dazu führen können, dass sie sich unterscheiden.

Veraltete Statistiken

Der Hauptgrund für Unterschiede zwischen geschätzten und tatsächlichen Ausführungsplänen sind veraltete Statistiken.

Der Abfrageoptimierer verwendet Statistiken, um einen kostengünstigen und optimierten Abfrageausführungsplan zu erstellen. Wenn Ihre Statistiken nicht aktualisiert werden oder Ihre Datenstichproben nicht geeignet sind, führt der Abfrageoptimierer eine vollständige Optimierung durch und erstellt einen Ausführungsplan auf der Grundlage alter Informationen. Sie können auch einen ineffizienten Ausführungsplan erhalten, der zu Problemen mit der Abfrageleistung führen kann.

Veraltete Statistiken treten manchmal auf, wenn sich Daten häufig ändern und Statistiken nicht gemäß der Indexwartung aktualisiert werden.

Serieller oder paralleler SQL Server-Ausführungsplan

Zur Kompilierzeit erstellt der Abfrageoptimierer einen Ausführungsplan und produziert abhängig von den Abfragekosten und dem Kostenschwellenwert der Parallelität einen seriellen oder parallelen Plan. Während der Ausführungsplan für den seriellen und den parallelen Modus identisch sein kann, entscheidet SQL Server zwischen ihnen basierend auf Serverressourcen und -aktivität.

Ungültige Schätzungen

Wie bereits erwähnt, bindet Algebrizer die Namen der Objekte, bevor die SQL-Abfrage ausgeführt wird. Angenommen, Sie geben an, dass eine Tabelle mit dem Namen test zur Laufzeit ERSTELLT wird, und versuchen Sie dann, einen geschätzten Ausführungsplan zu generieren. Da diese Tabelle nicht existiert, erhalten Sie eine Fehlermeldung, wie unten gezeigt.

Verwendung des Ausführungsplans

Zusammenfassend lässt sich sagen, dass Sie einen SQL Server-Ausführungsplan im Grafik-, XML- und Textformat generieren und ihn verwenden können, um Ihre Probleme mit der Datenbankleistung zu lösen.

Abfrageausführungspläne sind primäre Schritte bei der Identifizierung von Abfrage-Workflows, -Operatoren und -Komponenten, damit Sie Ihre Abfragen auf mögliche Verbesserungen abstimmen können. Weitere Informationen zur Verwendung von Ausführungsplänen finden Sie in unserem Beitrag:So lesen und analysieren Sie Ausführungspläne.