Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Steffen Krause Technical Evangelist Microsoft Deutschland GmbH

Ähnliche Präsentationen


Präsentation zum Thema: "Steffen Krause Technical Evangelist Microsoft Deutschland GmbH"—  Präsentation transkript:

1 Steffen Krause Technical Evangelist Microsoft Deutschland GmbH

2 ÜberblickWege zum AusführungsplanInterpretieren von AusführungsplänenOptimierung der Abfragen

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

7 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 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 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 ÜberblickWege zum AusführungsplanInterpretieren von AusführungsplänenOptimierung der Abfragen

11 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

12 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 Plan kann -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)

14 { Ermitteln von Ausführungsplänen }

15 ÜberblickWege zum AusführungsplanInterpretieren von AusführungsplänenOptimierung der Abfragen

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

17 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 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 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 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 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 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 Stream 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 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 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 }

27 ÜberblickWege zum AusführungsplanInterpretieren von AusführungsplänenOptimierung der Abfragen

28 Datenbankstruktur ändern Abfragen umschreiben Indizes anlegen, ändern, löschen Partitionieren Statistiken aktualisieren Optimizer Hints Plan Guides

29 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 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 sind normalerweise böse Erzwingung eines Ausführungsplans zerstört über 20 Jahre Fortschritte im Query Optimizer Nachdem das klar ist…

32 3 Arten von Hints JOIN 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 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 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: 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 { Plan Guides }

37 SQL Server 2008 Informationen SQL Server Performance Website Steffens SQL Server 2008 Ressourcenseite ressourcen.aspx Blog Steffen Krause Webcast-Aufzeichnungen efault.mspx?tab=2

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

39 © 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 "Steffen Krause Technical Evangelist Microsoft Deutschland GmbH"

Ähnliche Präsentationen


Google-Anzeigen