Upload
trantuong
View
239
Download
0
Embed Size (px)
Citation preview
SS 07 Anwendungs-Seminar
„Database Tuning & Administration“,
University of Konstanz
Lehrstuhl: Database & Information Systems Group
Prof. Dr. Marc. H. Scholl
Betreuung: Christian Grün
Matthias Röger, Thomas Zink; Information Engineering
Datenbank-Tuning & Administration MS SQL SERVER 2005 EXPRESS
SS 07 Anwendungs-Seminar
„Database Tuning & Administration“,
University of Konstanz
Lehrstuhl: Database & Information Systems Group
Prof. Dr. Marc. H. Scholl
Betreuung: Christian Grün
Matthias Röger, Thomas Zink; Information Engineering
Gliederung
• Einführung
• Statistik
• Indizes
Allgemeine Darstellung
Vergleichs-Studie
• Join-Verfahren
Allgemeine Darstellung
Anwendung Join-Operationen
• Auswirkung Variation Größe des Server-Arbeits-Speichers
• Abfrage-Optimierung TPC-H
Auswirkung Indizes auf Query-Plan und Ausführungszeit
Analyse ausgewählter Queries
• Fazit
• Einführung
• Statistik
• Indizes
Allgemeine Darstellung
Vergleichs-Studie
• Join-Verfahren
Allgemeine Darstellung
Anwendung Join-Operationen
• Auswirkung Variation Größe des Server-Arbeits-Speichers
• Abfrage-Optimierung TPC-H
Auswirkung Indizes auf Query-Plan und Ausführungszeit
Analyse ausgewählter Queries
• Fazit
2
Einführung
MS SQL SERVER 2005
• Integrierte Plattform für die Verwaltung von unternehmensweiten Daten.
• Werkzeuge zur Erstellung, Verwalten und Anwendung von Applikationen sind integriert.
• Wichtige Dienste:
- Relationaler Datenbank-Server
- Dienst für Datenanalyse, Berichtswesen und Datenintegration.
• Datenbank-Server kann relationale sowie XML-Daten verwalten.
• Express Edition kostenlos verfügbar.
MS SQL SERVER 2005
• Integrierte Plattform für die Verwaltung von unternehmensweiten Daten.
• Werkzeuge zur Erstellung, Verwalten und Anwendung von Applikationen sind integriert.
• Wichtige Dienste:
- Relationaler Datenbank-Server
- Dienst für Datenanalyse, Berichtswesen und Datenintegration.
• Datenbank-Server kann relationale sowie XML-Daten verwalten.
• Express Edition kostenlos verfügbar.
3
Einführung
Wichtige Tools zur Verwaltung der Serversoftware und zur Kommunikation mit der
Datenbank:
• sqlcmd
- Arbeitet auf Befehlszeilen-Ebene.
• SQL Server Management Studio Express
- Graphische Benutzerschnittstelle
- Wichtig für die Performance-Analyse.
- Ermöglicht das Testen von Abfragen in unterschiedlicher Form / mit unterschiedlichen
Indizes.
- Textuelle und graphische Ausgabe der Query-Pläne von Abfragen.
Wichtige Tools zur Verwaltung der Serversoftware und zur Kommunikation mit der
Datenbank:
• sqlcmd
- Arbeitet auf Befehlszeilen-Ebene.
• SQL Server Management Studio Express
- Graphische Benutzerschnittstelle
- Wichtig für die Performance-Analyse.
- Ermöglicht das Testen von Abfragen in unterschiedlicher Form / mit unterschiedlichen
Indizes.
- Textuelle und graphische Ausgabe der Query-Pläne von Abfragen.
4
Ansatzpunkte zur Query-Optimierung
Möglichkeiten zur Optimierung von Abfragen
• Allg. Nutzung Statistiken
• Nutzung der Informationen des Optimierers / Analyse-Tools
• Indizes
• Join-Verfahren
• Eingreifen durch „Hints‘ in Ausführungsplan
• Query Rewrite
• Hauptspeichergröße
• Indizierte Views• f
Möglichkeiten zur Optimierung von Abfragen
• Allg. Nutzung Statistiken
• Nutzung der Informationen des Optimierers / Analyse-Tools
• Indizes
• Join-Verfahren
• Eingreifen durch „Hints‘ in Ausführungsplan
• Query Rewrite
• Hauptspeichergröße
• Indizierte Views• f
5
Statistik
Die Entscheidung, ob ein Index verwendet wird oder nicht, hängt vom Index-Typ und von
der Index-Selektivität ab.
Ermittlung der Selektivität eines Index:
Optimierer verwendet spezielle Statistiken, um die Selektivität von Indizes zu ermitteln.
Diese Statistiken beschreiben die Selektivität und die Verteilung der Werte einer indizierten
Spalte.
Wesentliche Statistiken über:
• Anzahl Tabellenreihen
• Anzahl physikalischer Seiten
• Anzahl der Reihen, die für Statistik verwendet wurden
• Selektivität des ersten Indexspaltenpräfixes
• Durchschnittliche Länge aller Indexspalten
• Datum des letzten Updates
Die Entscheidung, ob ein Index verwendet wird oder nicht, hängt vom Index-Typ und von
der Index-Selektivität ab.
Ermittlung der Selektivität eines Index:
Optimierer verwendet spezielle Statistiken, um die Selektivität von Indizes zu ermitteln.
Diese Statistiken beschreiben die Selektivität und die Verteilung der Werte einer indizierten
Spalte.
Wesentliche Statistiken über:
• Anzahl Tabellenreihen
• Anzahl physikalischer Seiten
• Anzahl der Reihen, die für Statistik verwendet wurden
• Selektivität des ersten Indexspaltenpräfixes
• Durchschnittliche Länge aller Indexspalten
• Datum des letzten Updates
6
Statistik / Histogramm
Ein Histogramm gibt wertvolle Informationen über die entsprechenden Daten.
Beispiel Histogramm:
7
Eingesetzte Indizes
Einfacher Index
• Index auf ein Feld in der Tabelle.
• Pro Query kann mehr als ein Index zum Einsatz kommen.
• Je kleiner ein Index Feld, umso mehr Records pro Page.
Composite (zusammengesetzter) Index
• Index mit mehreren Feldern.
• Selektivität des ersten Feldes für Optimierer .
ausschlaggebend bei Entscheidung für/gegen Index.
Covering (abdeckender) Index
• Enthält alle Felder welche in einer Query auftreten.
• Kein extra Zugriff auf Datenseiten mehr notwendig.
Index mit „Included Columns“
• Spalten der WHERE-Klausel als Index-Spalten; zusätzlich Spalten der SELECT-Klausel als „eingeschlossene Spalten“ (Nichtschlüsselspalten), welche der Blattebene hinzugefügt werden.
Clustered Index
• Die Tabelle selbst ist der Index.
Einfacher Index
• Index auf ein Feld in der Tabelle.
• Pro Query kann mehr als ein Index zum Einsatz kommen.
• Je kleiner ein Index Feld, umso mehr Records pro Page.
Composite (zusammengesetzter) Index
• Index mit mehreren Feldern.
• Selektivität des ersten Feldes für Optimierer .
ausschlaggebend bei Entscheidung für/gegen Index.
Covering (abdeckender) Index
• Enthält alle Felder welche in einer Query auftreten.
• Kein extra Zugriff auf Datenseiten mehr notwendig.
Index mit „Included Columns“
• Spalten der WHERE-Klausel als Index-Spalten; zusätzlich Spalten der SELECT-Klausel als „eingeschlossene Spalten“ (Nichtschlüsselspalten), welche der Blattebene hinzugefügt werden.
Clustered Index
• Die Tabelle selbst ist der Index.
8
Analyse: Anwendung verschiedener Indizes
Anwendung verschiedener Indizes auf Query 6:
1) Ohne Indizes
2) Nichtgruppierter Index, einzeln auf alle Spalten der Where-Klausel à dex
à Index nicht ausgewählt
3) Nichtgruppierter Index, einzeln auf alle Spalten der Where-Klausel,
à Index-Nutzung (IX_shipdate) erzwungen
4) Gruppierter Index auf l_Shipdate
5) Gruppierter Index auf l_Discount
6) Zusammengesetzter, ungruppierter Index auf alle Spalten der Where-Klausel
à Index nicht ausgewählt
7) Zusammengesetzter, ungruppierter Index auf alle Spalten der Where-Klausel,
à Index-Nutzung erzwungen
8) Zusammengesetzter, gruppierter Index auf alle Spalten der Where-Klausel
9) Covered Index
Geschätzte Selektivität
anhand Histogramm:
l_quantity 0,50l_discount 0,30l_shipdate 0,15
Anzahl gesamt: 3.891.692
Anwendung verschiedener Indizes auf Query 6:
1) Ohne Indizes
2) Nichtgruppierter Index, einzeln auf alle Spalten der Where-Klausel à dex
à Index nicht ausgewählt
3) Nichtgruppierter Index, einzeln auf alle Spalten der Where-Klausel,
à Index-Nutzung (IX_shipdate) erzwungen
4) Gruppierter Index auf l_Shipdate
5) Gruppierter Index auf l_Discount
6) Zusammengesetzter, ungruppierter Index auf alle Spalten der Where-Klausel
à Index nicht ausgewählt
7) Zusammengesetzter, ungruppierter Index auf alle Spalten der Where-Klausel,
à Index-Nutzung erzwungen
8) Zusammengesetzter, gruppierter Index auf alle Spalten der Where-Klausel
9) Covered Index9
Join-Operationen
Folgende JOIN-Implementierungen stellt der SQL SERVER zur Verfügung:
• Geschachteltes Loop-Join• Sort-/Merge-Join• Hash-Join
Geschachteltes Loop-Join
Sehr langsam, falls kein Index für eine der Join-Spalten. Falls eine der beiden Join-Spalten einen Index aufweist, ist diesesVerfahren wesentlich performanter.
Sort-/Merge-Join
Schritt1: Sortieren der beiden Spalten nach den aufsteigenden Werten der Join-SpaltenSchritt2: Mischen jener Reihen der beiden Tabellen, in denen die Werte der Join-Spalten übereinstimmen zu einer Reihe
der Ergebnistabelle.
Hash-Join-Verfahren
verwendet die Hash-Funktion auf die Join-Spalte einer der beiden zu verknüpfenden Tabellen. Danach werden die Reihender zweiten Tabelle in der Hash Tabelle gesucht. Das Hash-Join-Verfahren ist performanter als das Sort-/Merge-JoinVerfahren, wenn die beiden Tabellen sehr groß sind und die Sortierung der Tabellen noch nicht durchgeführt wurde.
Folgende JOIN-Implementierungen stellt der SQL SERVER zur Verfügung:
• Geschachteltes Loop-Join• Sort-/Merge-Join• Hash-Join
Geschachteltes Loop-Join
Sehr langsam, falls kein Index für eine der Join-Spalten. Falls eine der beiden Join-Spalten einen Index aufweist, ist diesesVerfahren wesentlich performanter.
Sort-/Merge-Join
Schritt1: Sortieren der beiden Spalten nach den aufsteigenden Werten der Join-SpaltenSchritt2: Mischen jener Reihen der beiden Tabellen, in denen die Werte der Join-Spalten übereinstimmen zu einer Reihe
der Ergebnistabelle.
Hash-Join-Verfahren
verwendet die Hash-Funktion auf die Join-Spalte einer der beiden zu verknüpfenden Tabellen. Danach werden die Reihender zweiten Tabelle in der Hash Tabelle gesucht. Das Hash-Join-Verfahren ist performanter als das Sort-/Merge-JoinVerfahren, wenn die beiden Tabellen sehr groß sind und die Sortierung der Tabellen noch nicht durchgeführt wurde.
10
Analyse Join-Verfahren
Query 14
Sort-/Merge-Join (ohne index): 7333 ms
Sort-/Merge-Join (clustered index): 2776 ms
Hash-Join-Verfahren (ohne index): 5312 ms
Geschätzte Selektivität
l_shipdate 0,013Anzahl gesamt: 3.891.692Query 14
Sort-/Merge-Join (ohne index): 7333 ms
Sort-/Merge-Join (clustered index): 2776 ms
Hash-Join-Verfahren (ohne index): 5312 ms
11
Analyse Join-Verfahren
Geschachteltes Loop-Join (clustered index): 6760 ms
Hash-Join-Verfahren (mit index): 219 ms
Geschachteltes Loop-Join (clustered index): 6760 ms
Hash-Join-Verfahren (mit index): 219 ms
12
Variation der Größe des Server-Arbeitsspeichers
Vergleich der Ausführungszeit:
Ausgewählte Queries mit min / max
verfügbarem Server-Arbeitsspeicher.
Verfügbarer Speicher:
• Min S-Arbeitsspeicher 16 MB
• Max S-Arbeitsspeicher 1 GB
Vergleich der Ausführungszeit:
Ausgewählte Queries mit min / max
verfügbarem Server-Arbeitsspeicher.
Verfügbarer Speicher:
• Min S-Arbeitsspeicher 16 MB
• Max S-Arbeitsspeicher 1 GB
13
Variation der Größe des Server-Arbeitsspeichers
Ausführungspläne
Query 11: Query 12:
32.0001.500.00015.000
Ausführungspläne
Query 11: Query 12:
800.000
800.000
32.000
1.500.000
15.000
15.000
14
Query-Analyzer: „Missing Index“
Abfrageoptimierer verfügt über tolles Feature:
• Information über gewünschte Indizes
• Angaben über erwartete Beschleunigung der Abfrageleistung bei Verwendung der entsprechenden Indizes.
Beispielhafter Ausschnitt des xml-Files mit Information zum vom Abfrageoptimierer
geforderten Index:
Abfrageoptimierer verfügt über tolles Feature:
• Information über gewünschte Indizes
• Angaben über erwartete Beschleunigung der Abfrageleistung bei Verwendung der entsprechenden Indizes.
Beispielhafter Ausschnitt des xml-Files mit Information zum vom Abfrageoptimierer
geforderten Index:
15
Index-Tuning
Query 10: Hinweise des Optimierers:
CREATE NONCLUSTERED INDEX
IX_LINEITEM_L_RETURNFLAG
ON dbo.LINEITEM (L_RETURNFLAG)
INCLUDE (L_ORDERKEY, L_EXTENDEDPRICE,
L_DISCOUNT);
Go
CREATE NONCLUSTERED INDEX
IX_ORDERS_O_ORDERDATE
ON dbo.ORDERS (O_ORDERDATE)
INCLUDE (O_ORDERKEY, O_CUSTKEY);
Go 18
Index-Tuning - Auswirkung
Queryplan ohne Indizes
Ausführungszeit: 8,2 sec
Queryplan mit Indizes
Ausführungszeit: 2,2 sec
19
Analyse Query 1
• Query 1 fast gleiche Ausführungszeiten für alle Kombinationen.
• Welche Keys / Indizes werden verwendet?
• Wie viele Daten werden gebraucht?
20
Analyse Query 1
• ohne Keys / Indices
• mit Keys
• mit Indizesidentisch bei Keys und Indices
Probleme:
• sehr hohe Anzahl von Zeilen,
• gewählter Index IX_LINEITEM_L_SHIPDATE nicht geclustered.
à Versuch mit einem geclusterten index auf Lineitem.Shipdate.
• ohne Keys / Indices
• mit Keys
• mit Indizesidentisch bei Keys und Indices
Probleme:
• sehr hohe Anzahl von Zeilen,
• gewählter Index IX_LINEITEM_L_SHIPDATE nicht geclustered.
à Versuch mit einem geclusterten index auf Lineitem.Shipdate.
21
Analyse Query 20
Feststellung: 10 fache Ausführungszeit bei Nutzung
von Indexen (im Vergleich zu Keys).
Problem: Tablescan auf PART
Anlegen eines Index auf Tabelle PART
Neuer Testlauf mit Indexen
Neuer Testlauf mit Indexen und Keys
23
Feststellung: 10 fache Ausführungszeit bei Nutzung
von Indexen (im Vergleich zu Keys).
Problem: Tablescan auf PART
Anlegen eines Index auf Tabelle PART
Neuer Testlauf mit Indexen
Neuer Testlauf mit Indexen und Keys
Analyse Query 20
Ausführungsplan plain
24
Query Optimizer transformiert nested queries in unnested queries.Recap: Kim1982-UnnestingSQLTyp N und Typ JA nested query.
Analyse Query 20
Ausführungsplan mit Indizes:
25
Query Optimizer verwendet Index seeks für nested queries.Fehlender Index auf PART führt zu tablescan und spooling.recap: Kim1982-UnnestingSQL : temporäre Tabellen.
Analyse Query 20
Ausführungsplan mit Schlüssel und Indizes:
Sowohl PKs als auch vorhandene Indizes werden gescannt und für nested loops verwendet.Nur noch 1 nested loops operation (anstatt 3).
26
Analyse Query 21
3 nested loops, Typ J und DLaufzeit mit Keys und Indizes benötigt die 10-facheAusführungszeit im Vergleich zur ausschließlichen Verwendung von Indizes bzw. Keys.
28
Analyse Query 21Ausschnitt Ausführungsplan Plain:
Transformation der nested loops.3 table scans auf LINEITEM (kann im Buffer behalten werden).
29
Analyse Query 21Ausschnitt Ausführungsplan mit Keys:
Keine Transformation der nested loops.3 clustered index scans/seeks auf Primärschlüssel (wieder in-memory).
30
Analyse Query 21Ausschnitt Ausführungsplan Indizes:
Keine Transformation der nested loops.3 index scans/seeks auf Suppkey Index (wieder in-memory).
31
Analyse Query 21Ausschnitt Ausführungsplan Keys und Indizes:
Keine Transformation der nested loops.Scant abwechselnd PK und Index, daher mehrmaliges lesen von HD notwendig.Keine Nutzung des Buffers möglich. 32
Analyse Query 21
Lösung:
Forcieren der Wahl des Indexdurch Umschreiben der Query.
SELECT col FROM table WITH(index(name))
33
Lösung:
Forcieren der Wahl des Indexdurch Umschreiben der Query.
SELECT col FROM table WITH(index(name))
Fazit
• SQL SERVER 2005 Express verfügt über einen leistungsfähigen Query-Optimierer.
• Wählt in den meisten Fällen einen günstigen Query-Plan aus.
• Anwender ist dafür verantwortlich, die vom Query-Optimierer benötigten Daten bereit zu stellen und aktuell zu halten.
• „Blindes Vertrauen“ in die Leistungsfähigkeit des Query-Optimierers nicht angebracht.
• Anwender muss „seine Daten“ kennen, um entsprechende Indizes, Statistiken, Aktualisierungen u. ä. vornehmen und auf deren Basis..
• .. in die Ausführungspläne eingreifen zu können und somit das an die jeweilige Situation angepasste Optimum zu erreichen.
• SQL SERVER 2005 Express verfügt über einen leistungsfähigen Query-Optimierer.
• Wählt in den meisten Fällen einen günstigen Query-Plan aus.
• Anwender ist dafür verantwortlich, die vom Query-Optimierer benötigten Daten bereit zu stellen und aktuell zu halten.
• „Blindes Vertrauen“ in die Leistungsfähigkeit des Query-Optimierers nicht angebracht.
• Anwender muss „seine Daten“ kennen, um entsprechende Indizes, Statistiken, Aktualisierungen u. ä. vornehmen und auf deren Basis..
• .. in die Ausführungspläne eingreifen zu können und somit das an die jeweilige Situation angepasste Optimum zu erreichen.
37
Literatur-Verzeichnis
Interessante Literatur, welche während des Seminars Verwendung fand:
- Integrierte Hilfe des SQL Server 2005 Express.
- Skript „Architecture and Implementation of Database Management Systems, Universität Konstanz, Prof. Dr. Marc H. Scholl, WS 2006/07.
- Relational database index design and the optimizers: DB2, Oracle, SQL server, Wiley & Sons Verlag, Tapio Lahdenmäki, 2005.
- SQL Server 2005 Documentation, URL: http://msdn2.microsoft.com/en-us/library/ms203721.aspx[letzter Aufruf 17.07.07].
- SQL Server 2005 – Eine umfassende Einführung, dpunkt.verlag, Dusan Petkovic, 2006.
- SQL Server 2005 – Das Handbuch für Administratoren, Addison-Wesley Verlag, Buck Woody, 2007.
- SQL Server 2005 – Programmierhandbuch, Software & Support Verlag, Andreas Kosch, 2006.
Interessante Literatur, welche während des Seminars Verwendung fand:
- Integrierte Hilfe des SQL Server 2005 Express.
- Skript „Architecture and Implementation of Database Management Systems, Universität Konstanz, Prof. Dr. Marc H. Scholl, WS 2006/07.
- Relational database index design and the optimizers: DB2, Oracle, SQL server, Wiley & Sons Verlag, Tapio Lahdenmäki, 2005.
- SQL Server 2005 Documentation, URL: http://msdn2.microsoft.com/en-us/library/ms203721.aspx[letzter Aufruf 17.07.07].
- SQL Server 2005 – Eine umfassende Einführung, dpunkt.verlag, Dusan Petkovic, 2006.
- SQL Server 2005 – Das Handbuch für Administratoren, Addison-Wesley Verlag, Buck Woody, 2007.
- SQL Server 2005 – Programmierhandbuch, Software & Support Verlag, Andreas Kosch, 2006.
39