Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Abfrageoptimierung mit SQL Server

Ähnliche Präsentationen


Präsentation zum Thema: "Abfrageoptimierung mit SQL Server"—  Präsentation transkript:

1 Abfrageoptimierung mit SQL Server
3/28/2017 3:36 PM Abfrageoptimierung mit SQL Server Steffen Krause Technical Evangelist Microsoft Deutschland GmbH © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

2 Agenda Überblick Wege zum Ausführungsplan
Interpretieren von Ausführungsplänen Optimierung der Abfragen

3 Gründen für schlechte Performance …einige
I/O-Subsystem Log-Schreibperformance tempdb RAID-Level Filegroups/Partitionierung Zu viele Recompiles Manchmal auch zu wenige Parallelitäts-Probleme (Lock-Waits) Ausführungsreihenfolge Isolation Level Bottleneck-Analyse mit sys.dm_os_wait_stats Fehlende, falsche oder überflüssige Indizes Fehlende oder nicht aktuelle Statistiken Ungünstiges Datenbankdesign Ungünstige Abfragen

4 Welche Abfragen analysieren?
Abfragen mit langer Laufzeit Sehr häufig ausgeführte Abfragen Sys.dm_exec_query_stats Execution_count, total_worker_time, total_elapsed_time Hilft nicht bei fehlender Parametrisierung Reports: Performance – Top Queries by…

5 Warum mit Ausführungsplänen beschäftigen?
Verstehen, wo in wichtigen Abfragen der meiste Aufwand geleistet wird Optimierungsmöglichkeiten durch Erstellung oder Änderung von Indizes oder Partitionen, abdeckenden Indizes oder indizierten Sichten Eventuell Datenbankschema überprüfen, denormalisieren usw. Vergleichen, wie Schätzungen und tatsächliche Kosten aussehen Spezifische Abfragen mit Optimizer Hints optimieren Alte Hints eliminieren, die nicht mehr helfen Optimierung der Abfrage selbst

6 Lebenszyklus von Abfragen
Neue Abfrage Lookup im Plan Cache Ausführbarer Plan gefunden Kompilierter Plan gefunden Nicht gefunden Abfrageoptimierung (Plan Generation, View Matching, Statistics, Costing) Abfrageausführung (Query Operators, Memory Grants, Parallelism, Showplan) SQL-Sprachverarbeitung (Parse/Bind, Statement/Batch Execution, Plan Cache Management) Parse Auto-Parametrisierung Bindung, Views expandieren Abfrageoptimierung Nutzen oder Erstellen eines Ausführungsplans Memory Grants & Degree of Parallelism festlegen Ausführen Plan in Cache schreiben

7 Inhalte des Ausführungsplans
Wie Daten zugegriffen werden Wie gejoint wird Wie Daten aggregiert werden Reihenfolge der Operationen Verwendung von temporären Objekten und Sortierungen Schätzungen für Zeilenanzahlen, Iterationen und Kosten pro Schritt Tatsächliche Zeilenzahlen und Iterationen Wenn Statistics Profile genutzt wird Verwendung von Parallelität

8 Ausführungspläne sind Bäume
Man kann sich die Ausführung als „Pipeline“ vorstellen Daten bewegen sich von den Blättern zur Wurzel des Baumes Joins erzeugen Verzweigungen mit 2 Teilbäumen Jeder Schritt ist ein „Operator“ Bei Joins müssen beide Zweige vor dem Join selbst ausgeführt werden (pro Zeile) Eine Zeile kann durch viele Operatoren fließen bevor die nächste Zeile gelesen wird

9 Eine Plan-Lesestrategie
Starten mit den Blättern des Ausführungsplans Das sind die Datenquellen Im grafischen Plan am weitesten rechts Im Text-Plan am weitesten eingerückt Im XML-Plan die Blätter des XML-Baums Beginne mit dem obersten Blatt Lesen von rechts nach links Join-Zweigen von oben nach unten folgen Zeigt Ausführungsreihenfolge und Abhängigkeiten Nested Loops werden iteriert!

10 Agenda Überblick Wege zum Ausführungsplan
Interpretieren von Ausführungsplänen Optimierung der Abfragen

11 Wege zum Ausführungsplan
Microsoft TechNet Seminar 2006 Wege zum Ausführungsplan Management Studio Geschätzten Ausführungsplan anzeigen Verwendet SET SHOWPLAN_XML ON Abfrage wird nicht ausgeführt Enthält geschätzte Zeilenzahlen Tatsächlichen Ausführungsplan einschließen Verwendet SET STATISTICS XML ON Abfrage wird ausgeführt Enthält tatsächliche und geschätzte Zeilenzahlen Eigenschaften oder XML-Plan für Details Kommando Abfrage wird ausgeführt? Anzeige als Text? Geschätzte Zeilenzahlen und Statistiken Tatsächliche Zeilenzahlen und Statistiken Text set showplan_text on Nein Ja set showplan_all on set statistics profile on XML set showplan_xml on set statistics xml on Seminar Name

12 Ausführungspläne aus dem Plan Cache
Ermöglicht das Auslesen des Plan Cache Auch SQL aus Anwendungen, für die kein Quelltext zur Verfügung steht Inhalt des Ausführungsplan-Cache sys.dm_exec_query_stats sql_handle in Anweisungen: sys.dm_exec_sql_text plan_handle gibt XML Ausführungsplan aus dm_exec_query_plan Details (für Recompile-Analyse) über dm_exec_plan_attributes Schema-Dokumentation: showplan.xsd, lokal und unter Für grafischen Ausführungsplan in SQL 2005: XML-Plan in Datei speichern und in .sqlplan umbenennen

13 Dynamic Management Views Statement Cache - Ausführungspläne
Microsoft TechNet Seminar 2006 Dynamic Management Views Statement Cache - Ausführungspläne Plan kann <MissingIndex>-Element enthalten: Welcher Index würde dieser Abfrage helfen select text, query_plan, st.* from Sys.dm_exec_query_stats st cross apply sys.dm_exec_sql_text(sql_handle) s cross apply sys.dm_exec_query_plan(plan_handle) where query_plan.exist(' declare namespace sp="http://schemas.microsoft.com/sqlserver/2004/07/showplan"; //sp:MissingIndex') = 1 Alternativ, wenn nur fehlende Indizes interessieren Verwenden von sys.dm_db_missing_index_... SELECT migs.*, mid.* FROM sys.dm_db_missing_index_group_stats AS migs INNER JOIN sys.dm_db_missing_index_groups AS mig ON (migs.group_handle = mig.index_group_handle) INNER JOIN sys.dm_db_missing_index_details AS mid ON (mig.index_handle = mid.index_handle) Seminar Name

14 { Ermitteln von Ausführungsplänen }
3/28/2017 3:36 PM { Ermitteln von Ausführungsplänen } Demo © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

15 Agenda Überblick Wege zum Ausführungsplan
Interpretieren von Ausführungsplänen Optimierung der Abfragen

16 Worauf man achten sollte
Große Zeilenzahlen Große geschätzte Kosten Join-Techniken (Hash, Loop, Merge) Zugriffstechniken (Seeks, Scans) Aggregationstechniken (Hash, Stream) Andere Operationen (Sort, Top, …)

17 Nested Loop Joins Für jede Zeile der äußeren (oberen) Eingabe wird die innere (untere) Eingabe einmal gescannt Es wird also so oft iteriert, wie die obere Eingabe Zeilen hat Nested Loops sind die einzige Quelle von Iterationen in einem Ausführungsplan APPLY in SQL 2005 ist auch als Nested Loop implementiert Viele Subqueries werden Nested Loops

18 Nested Loop Joins Worauf achten
Im inneren (unteren) Zweig sollte ein guter Index Seek verwendet werden Die Anzahl der Iterationen sollte viel kleiner als die Tabellengröße der unteren Tabelle sein Sonst wäre ein Hash Join effizienter Die Kosten sind abhängig von der Anzahl der Iterationen und der gelesenen Zeilenzahl pro Iteration Am besten, wenn der innere Seek sehr selektiv ist und der äußere wenige Zeilen enthält

19 Hash Joins Aus der oberen Eingabe wird eine Hashtabelle im Hauptspeicher erstellt Jede Zeile der unteren Eingabe wird gegen diese Hashtabelle auf Übereinstimmung geprüft Die kleinere Datenquelle wird zur Erstellung der Hashtabelle genutzt Hash Joins in häufig benutzten Abfragen deuten auf einen fehlenden Index auf den Join-Schlüssel der inneren Tabelle hin Missing Index Element im XML-Ausführungsplan überprüfen Selbst mit Index kann ein Hash Join effizienter als eine Nested Loop sein, wenn die Anzahl der Zeilen in der äußeren Tabelle sehr groß ist

20 Merge Joins Beide Engaben müssen in Reihenfolge des Join-Schlüssels sortiert sein Über Index Scan oder Sort-Operation Ausführung abwechselnd in oberen und unteren Zweig, je nachdem wie der Join Key sich ändert Wie bei einem Hash Join wird jeder Zweig einmal durchlaufen Feste Kosten für komplettes Durchlaufen beider Eingaben

21 Scans und Seeks Verwechseln Sie nicht Index Scans mit Index Seeks
Seek ist die einzige effiziente Strategie, um einzelne Zeilen oder einen Bereich von gesuchten Zeilen zu finden Scan liest alle Zeilen eines Index und ist für große Indizes teuer, es sei denn, der größte Teil des Index wird benötigt Wenn die Tabelle einen Clustered Index hat (gruppierter Index), dann wird ein Table Scan immer als Clustered Index Scan dargestellt

22 Index-Überlegungen Ein Index Seeks benötigt gültige Suchargumente ab der ersten Spalte im Index Eine Suche, die die erste Spalte des Index nicht enthält wird nie einen Seek ergeben, kann aber von einem Index Scan profitieren Mehrspaltige Seeks benötigen Gleichheit in den ersten Spalten des Index

23 Aggregationen Stream Aggregate Hash Aggregate
Daten müssen in Group By Reihenfolge sortiert sein Akkumulieren Werte aus sortiertem Stream bis sich der Group By Wert ändert Behält Sortierreihenfolge für folgende Operationen bei Hash Aggregate Sortierung nicht erforderlich Muss Hashwert für die Group By Spalte jeder Zeile berechnen Entscheidend sind CPU- und Speicherverbrauch Hash kontra Sort und die Beibehaltung der Sortierung

24 Teure Operationen Große Sorts Table Scans großer Tabellen
oder Index Scans großer Indizes Außer, wenn die Abfrage einen großen Teil der abgefragten Tabelle benötigt Achten Sie besonders auf große Scans für Hash Joins, die nur ein paar Zeilen zurückliefern Oft ist ein Loop Join/Index Seek schneller als ein Hash, wenn der Join sehr selektiv ist und gute Indizes existieren.

25 Parallelismus Jede parallele Operation wird von allen Threads in einem parallelen Plan ausgeführt „Partition Parallelism“, nicht „Pipeline Parallelism“ Gelber Indikator im grafischen Showplan Mehr Details in XML-Plan und Eigenschaften Partitionierungsspalten werden verwendet, um unabhängige Bearbeitung der Streams zu erlauben Repartition Streams ist aufwändig, aber notwendig, um Streams für die nächste Operation auszurichten

26 { Ausführungsplan-Beispiele }
3/28/2017 3:36 PM { Ausführungsplan-Beispiele } Demo © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

27 Agenda Überblick Wege zum Ausführungsplan
Interpretieren von Ausführungsplänen Optimierung der Abfragen

28 Optimierung des Ausführungsplans
Datenbankstruktur ändern Abfragen umschreiben Indizes anlegen, ändern, löschen Partitionieren Statistiken aktualisieren Optimizer Hints Plan Guides

29 Recompiles vermeiden Stored Procedures Parametrisierung
Auto-Parametrisierung: SIMPLE vs. FORCED Tabellenerzeugung Bestimmte Session-Settings erzwingen Recompile bei jeder Ausführung Manchmal sind Recompiles für optimalen Ausführungsplan notwendig Komplexe Abfragen mit sehr unterschiedlicher Selektivität je nach Parameter

30 Ändern der Datenbankstruktur Indizes, Partitionierung, Statistiken
Immer die Gesamtheit der Abfragen betrachten Trace aufzeichnen Datenbank-Optimierungsratgeber ausführen Reports genau untersuchen Clustered Indizes Regeln beachten, sonst fragmentiert die DB „Covering Indizes“ erstellen Include-Spalten in 2005/2008 Aktuelle Statistiken sind essenziell Auto Create Statistics und Auto Update Statistics an oder Statistiken im Wartungsplan aktualisieren

31 Query Hints Disclaimer
Query Hints sind normalerweise böse Erzwingung eines Ausführungsplans zerstört über 20 Jahre Fortschritte im Query Optimizer Nachdem das klar ist…

32 Hints 3 Arten von Hints JOIN Hint QUERY Hint TABLE Hint
Auswahl des Join-Typ: Loop, Hash, Merge Umkehrung des Joins mit REMOTE QUERY Hint Viele verschiedene Direkte Beeinflussung der Operatoren für Aggregation, Union, Join FAST Zeilenanzahl OPTIMIZE FOR Parameterwert TABLE Hint Table Scan oder Indexverwendung Isolation Level Locking-Verhalten

33 Über Hints hinaus Hints erfordern Änderung des Quellcodes
Hints können nicht einfach aktiviert oder deaktiviert werden Hints sind für den Administrator nicht direkt sichtbar Tendieren dazu, „vergessen“ zu werden Willkommen, Plan Guides…

34 Plan Guides Ermöglichen Hints für Queries ohne Quellcode-Änderung
Benannte Objekte in der Datenbank Erstellt im Management Studio oder sp_create_plan_guide Können aktiviert und deaktiviert werden Erstellen und (de-)aktivieren löscht entsprechende Abfragen aus dem Cache

35 Arten von Plan Guides Arten:
Object: für Ausführung in Prozeduren, Funktionen und DML Triggern SQL: für SQL-Anweisungen, die direkt ausgeführt werden Template: Zur Beeinflussung der Autoparametrisierung (SIMPLE oder FORCED) Spezialfall: Kompletten Ausführungsplan erzwingen xml_showplan in sp_create_plan_guide sp_create_plan_guide_from_cache

36 Demo { Plan Guides } 3/28/2017 3:36 PM
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

37 Weitere Informationen
SQL Server 2008 Informationen SQL Server Performance Website Steffens SQL Server 2008 Ressourcenseite Blog Steffen Krause Webcast-Aufzeichnungen

38 Ask the Experts Wir freuen uns auf Ihre Fragen: Technische Experten stehen Ihnen während der gesamten Veranstaltung in der Haupthalle zur Verfügung.

39 3/28/2017 3:36 PM © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.


Herunterladen ppt "Abfrageoptimierung mit SQL Server"

Ähnliche Präsentationen


Google-Anzeigen