Datenbanken bilden das zentrale Rückgrat nahezu jeder modernen Unternehmensanwendung. Neben der Datensicherheit und -integrität spielt auch die Hochverfügbarkeit, Lastverteilung und Geschwindigkeit eine zunehmend wichtigere Rolle.
Diese Arbeit gibt einen Überblick über die am häufigsten auftretenden Ursachen für Performanceprobleme und deren Lösungsmöglichkeiten.
Als Einstieg in die Thematik werden die erforderlichen Grundlagen aus Sicht der internen Verarbeitung von SQL-Anweisungen, der Datenverwaltung durch den SQL Server, der Möglichkeiten einer Performanceüberwachung und Leistungsmessung, sowie der technischen Systemumgebung, besprochen. Anschließend werden die vom SQL Server unterstützten Indizes, deren Verwaltung und die Rolle von Statistiken im Optimierungsprozess thematisiert. Der letzte Teil stellt die Möglichkeiten einer Daten- und Lastverteilung durch Partitionierungsmechanismen, sowie die Aspekte der SQL-Code Optimierung vor.
Als technische Grundlage dieser Arbeit dient der Microsoft SQL Server 2008. Ein Großteil der hier genannten Performanceprobleme und Lösungsansätze lässt sich aber auch auf frühere Versionen des Microsoft SQL Server, wie auch auf andere relationale Datenbanksysteme übertragen.
Inhaltsverzeichnis
1. Einleitung
2. Grundlagen
2.1 Optimierungsmodell
2.2 Interne Verarbeitung von SQL-Anweisungen
2.3 Datenverwaltung durch den SQL Server
2.3.1 Datenbank
2.3.2 Lesen von Datenseiten
2.3.3 Schreiben von Datenseiten
2.4 Performanceüberwachung und Leistungsmessung
2.4.1 Ausführungszeit einer SQL-Anweisung messen
2.4.2 Statistische Größen mittels T-SQL "SET-Anweisungen" ermitteln
2.4.3 Grafische Ausführungspläne
2.4.4 Der Aktivitätsmonitor
2.4.5 Berichte
3. Systemumgebung
3.1 Arbeitsspeicher
3.2 Prozessor
3.3 Festplatten
3.3.1 Festplattenarten
3.3.2 RAID-Systeme
3.4 Netzwerk
3.5 Betriebssystem
3.6 Datenbankmanagementsystem
4. Indizes
4.1 Grundlagen von Indizes
4.2 Verwendung von Indizes
4.2.1 HEAP - Tabelle ohne gruppierten Index
4.2.2 Gruppierte Indizes (Clustered Index)
4.2.3 Nicht gruppierte Indizes (Nonclustered Index)
4.2.4 Eindeutige Indizes (Unique Indexes)
4.2.5 Gefilterte Indizes (Filtered Indexes)
4.2.6 Kombinierte Indizes (Combined Indexes)
4.2.7 Abdeckende Indizes (Covering Indexes)
4.3 Verwaltung von Indizes
4.3.1 Der Füllfaktor
4.3.2 Indizes reorganisieren
4.3.3 Indizes neu erstellen
4.3.4 Fehlende Indizes aufspüren
4.3.5 Überflüssige Indizes
5. Statistiken
5.1 Statistiken anzeigen
5.2 Statistiken anlegen
5.3 Statistiken aktualisieren
5.4 Gefilterte Statistiken
6. Partitionierung
6.1 Hardwareorientierte Partitionierung
6.2 Vertikale Partitionierung
6.3 Horizontale Partitionierung
7. Abfrageoptimierung
7.1 Aufbau einer Abfrage
7.2 Parametrisierung
7.2.1 Automatische Parametrisierung
7.2.2 Erzwungene Parametrisierung
7.2.3 Explizite Parametrisierung
7.2.4 Parametrisierung durch gespeicherte Prozeduren
7.2.5 Parametrisierungsproblematik
7.3 Hinweise
7.3.1 Abfragehinweise (Query Hints)
7.3.2 Tabellenhinweise (Table Hints)
7.3.3 Verknüpfungshinweise (JOIN Hints)
8. Fazit
Zielsetzung & Themen
Diese Arbeit zielt darauf ab, einen umfassenden Überblick über die häufigsten Ursachen für Performance-Probleme in Microsoft SQL Server 2008-Datenbanken zu geben und praxisorientierte Lösungsansätze zu deren Behebung aufzuzeigen.
- Grundlagen der internen SQL-Verarbeitung und Datenverwaltung
- Methoden zur Performance-Überwachung und Messung
- Optimierungsmöglichkeiten durch Indizierung und Statistiken
- Strategien zur Datenverteilung mittels Partitionierung
- Techniken zur SQL-Code-Optimierung und Abfrage-Parametrisierung
Auszug aus dem Buch
2.4.2 Statistische Größen mittels T-SQL "SET-Anweisungen" ermitteln
Die Ausführungszeit einer SQL-Anweisung allein ist oftmals jedoch nicht aussagekräftig genug, sondern muss in Abhängigkeit von weiteren Parametern betrachtet werden. So spielt die Anzahl der Lesevorgänge, wie auch die Anzahl der ausgeführten Index- und Tabellenscans eine wesentliche Rolle für die Performanceoptimierung.
SET STATISTICS IO
Wenn die Option SET STATISTICS IO aktiviert ist, werden nach der Ausführung einer SQL-Anweisung im Meldungsfenster des SQL Management Studio detaillierte Informationen über die Datenträgeraktivitäten der beteiligten Tabellen ausgegeben. Die Meldung gibt unter anderem Aufschluss über:
• Scananzahl - Anzahl der ausgeführten Index- und Tabellenscans
• Logische Lesevorgänge - Anzahl der aus dem Cache gelesenen Datenseiten
• Physische Lesevorgänge - Anzahl der von der Festplatte gelesenen Datenseiten
• Read-Ahead-Lesevorgänge - Anzahl der neu im Cache hinterlegten Datenseiten
Zusammenfassung der Kapitel
1. Einleitung: Diese Einleitung führt in die Relevanz der Datenbank-Performance-Optimierung ein und gibt einen Ausblick auf die sechs thematischen Abschnitte der Arbeit.
2. Grundlagen: Hier werden grundlegende Optimierungsstrategien sowie die interne SQL-Verarbeitung und Performance-Überwachung des SQL Servers erläutert.
3. Systemumgebung: Dieses Kapitel behandelt die technischen Voraussetzungen und Hardwarekomponenten wie Arbeitsspeicher, Prozessoren und Festplatten für einen performanten Datenbankbetrieb.
4. Indizes: Hier wird die zentrale Rolle von Indizes zur Beschleunigung von Such- und Sortiervorgängen sowie deren Verwaltung und Optimierung detailliert beschrieben.
5. Statistiken: Dieses Kapitel erläutert, wie Statistiken den Abfrageoptimierer unterstützen und welche Methoden zur manuellen oder automatischen Pflege dieser Informationen bestehen.
6. Partitionierung: Hier werden Konzepte der vertikalen und horizontalen Partitionierung vorgestellt, um große Datenmengen effizienter zu verwalten.
7. Abfrageoptimierung: Dieser Abschnitt konzentriert sich auf die Optimierung von SQL-Code aus Sicht der Anwendungsentwicklung, insbesondere durch Parametrisierung und Abfragehinweise.
8. Fazit: Das Fazit fasst zusammen, dass Performance-Optimierung ein komplexer, interaktiver Prozess ist, der eine stetige Überwachung erfordert.
Schlüsselwörter
Microsoft SQL Server 2008, Performance-Optimierung, Datenbank-Tuning, SQL-Abfragen, Indizierung, Statistiken, Partitionierung, Abfrageoptimierer, Ausführungsplan, Performance-Überwachung, Arbeitsspeicher, RAID-Systeme, Datenverwaltung, Query Hints, SQL-Code
Häufig gestellte Fragen
Worum geht es in dieser Bachelorarbeit grundsätzlich?
Die Arbeit befasst sich mit der Performance-Optimierung von Datenbanken am Beispiel des Microsoft SQL Server 2008, wobei Ursachen für Performanceprobleme analysiert und Lösungsstrategien erarbeitet werden.
Was sind die zentralen Themenfelder der Arbeit?
Die zentralen Themen sind Grundlagen der SQL-Verarbeitung, Hardware-Systemumgebung, Indexverwaltung, Einsatz von Statistiken, Partitionierungsstrategien sowie die Optimierung von SQL-Code.
Welches primäre Ziel verfolgt die Arbeit?
Das primäre Ziel ist es, dem Datenbankadministrator und Entwickler ein systematisches Vorgehen zur Analyse und Verbesserung der Performance von SQL Server-Instanzen an die Hand zu geben.
Welche wissenschaftliche Methode wird zur Untersuchung verwendet?
Es wird eine praxisorientierte, analytische Methode verwendet, die durch Performancetests (z.B. mittels SET STATISTICS IO/TIME) und die Analyse von Ausführungsplänen unterstützt wird.
Was wird im Hauptteil der Arbeit behandelt?
Der Hauptteil behandelt die interne Verarbeitung von Abfragen, die Konfiguration der Systemumgebung, die Struktur und Wartung von Indizes sowie Techniken zur Partitionierung und Abfrageoptimierung.
Welche Schlüsselwörter charakterisieren diese Arbeit?
Die Arbeit lässt sich am besten durch Begriffe wie SQL Server Performance-Optimierung, Indexmanagement, Abfrageplan, Partitionierung und Statistikpflege charakterisieren.
Warum spielt die Parametrisierung bei der Abfrageoptimierung eine wichtige Rolle?
Die Parametrisierung erhöht die Trefferquote im Plancache, was dazu führt, dass bereits erstellte Ausführungspläne wiederverwendet werden können, anstatt bei jeder Abfrage neue zu kompilieren.
Wie unterscheidet sich ein gruppierter von einem nicht gruppierten Index?
Bei einem gruppierten Index sind die tatsächlichen Tabellendaten in der Blattebene des Index sortiert gespeichert, während bei einem nicht gruppierten Index die Indexstruktur separat von den eigentlichen Daten gehalten wird und auf diese verweist.
- Arbeit zitieren
- Simon Kronwitter (Autor:in), 2011, Datenbank-Performance-Optimierung, München, GRIN Verlag, https://www.grin.com/document/178244