Datenbanken II Optimierung von Datenbanken von

Werbung
Datenbanken II
Optimierung von Datenbanken
von
Bettina Keil
45748
MIM 07
Inhaltsverzeichnis
1 Motivation
1
2 Phase 1.1: Optimierung des Datenbankschemas
2
2.1
Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.2
Konzeptuelles Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.3
Internes Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.4
Externes Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
3 Phase 1.2: Anwendungsoptimierung
5
3.1
Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.2
Optimierung der Anwendung . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.3
Optimierung im Mehrbenutzerbetrieb . . . . . . . . . . . . . . . . . . . .
6
3.4
Formulierung von SQL-Anweisungen . . . . . . . . . . . . . . . . . . . . .
7
4 Phase 2: Hauptspeicheroptimierung
8
4.1
Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.2
Optimierung des Datenbankpuffers . . . . . . . . . . . . . . . . . . . . . .
8
4.3
Optimierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
5 Phase 3: Eingabe-/Ausgabeoptimierung
12
5.1
Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2
Betriebssystemfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.3
Lastverteilung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.4
Optimierung der physischen Speicherstrukturen . . . . . . . . . . . . . . . 13
6 Zusammenfassung
15
7 Quellenverzeichnis
16
i
1 Motivation
Bei der Verwaltung großer Datenmengen mittels Datenbanken nimmt mit wachsender
Zahl der Datensätze die Wichtigkeit der Performance der Datenbank zu. Diese kann auf
vielfältige Weise gesteigert werden: Die Erstellung eines optimalen Datenbankschemas
bildet den Grundstein einer effizient nutzbaren Datenbank. Weiterhin können Bereiche
wie Anfragen oder Hardware in Bezug auf die Performance analysiert und umstrukturiert werden. Ein einfacher aber kostenintensiver Weg zur Performancesteigerung ist die
Aufrüstung der Rechnersysteme durch Hinzufügen zusätzlicher Hardware. Durch eine
geschickte Optimierung der bestehenden Datenbank können diese finanziellen Mehrbelastungen umgangen werden. Hauptmotivation ist die Verkürzung der Antwortzeiten in
Verbindung mit einem erhöhten Datendurchsatz.
Die Optimierung von Datenbanken umfasst 4 Phasen:
In Phase 1 wird eine Optimierung des Datenbankschemas sowie eine Anwendungsoptimierung vorgenommen. Dabei liegt der Fokus auf der Schaffung eines effizient nutzbaren
Datenbankschemas in Bezug auf die Anwendung, für welche die Datenbank konstruiert
wurde. Ziel ist es, den Großteil der meistgenutzten Daten im Datenbankpuffer halten zu
können. Die Anwendungsoptimierung zielt darauf ab, ineffiziente Datenbankanfragen zu
vermeiden und Anfragen allgemein zu otpimieren.
In Phase 2, der Hauptspeicheroptimierung, wird durch Anpassung des Datenbankpuffers
und des Optimierers eine Minimierung der Anzahl physischer Speicherzugriffe angestrebt.
In Phase 3, der Eingabe-/Ausgabeoptimierung bzw. Optimierung der Sekundärspeicherzugriffe, werden die in Phase 2 in der Anzahl minimierten physischen Zugriffe auf den
Sekundärspeicher in ihrer Ausführung optimiert.
Phase 4, die Konfliktoptimierung, dient dem Lösen verbleibender Zugriffskonflikte
innerhalb der logischen Strukturen der Datenbank.
In den folgenden Kapiteln werden die Phasen 1-3 näher beschrieben sowie detaillierte Optimierungsansätze dargestellt. Auf Phase 4, die Konfliktoptimierung, wird nicht
näher eingegangen, da es sich um fallspezifisch vorzunehmende Konfliktlösungen handelt.
1
2 Phase 1.1: Optimierung des
Datenbankschemas
2.1 Ziel
Durch die Optimierung des Datenbankschemas soll die Anzahl der für die Anwendung
der Datenbank benötigten Zugriffe auf die Datenbank minimiert werden sowie die verbleibenden Zugriffe in der Formulierung ihrer Anfragen optimiert werden.
Die Erstellung des Datenbankschemas erfolgt nach dem relationalen Datenmodell,
welches die in Tabellen gespeicherten Daten durch entsprechende Operationen mengenorientiert verknüpft und verarbeitet.
Daraufhin folgt eine weitere Verfeinerung des Datenbankschemas durch Normalisierung,
wobei das Schema in eine bestimmte Normalform gebracht wird. Diese sind die Erste
Normalform, die Zweite Normalform, die Dritte Normalform, die Boyce-Codd Normalform
und die Vierte Normalform.
Das Datenbankschema besteht nach ANSI-SPARC aus einem internen Schema (Datenverwaltung auf Platte, Indexstrukturen, ...), einem konzeptuellen Schema (Beschreibung
der Gesamtstruktur, Integritätsbedingungen, ...) und i.a. mehreren externen Schemata
(Sichten für verschiedene Anwendungen, Benutzergruppen, ...). Innerhalb dieser drei
Ebenen der Drei-Schema-Architektur bestehen Möglichkeiten für die Optimierung des
Datenbankschemas.
2.2 Konzeptuelles Schema
Innerhalb des konzeptuellen Schemas wird die Gesamtstruktur der Datenbank für alle
Benutzer beschrieben, welche sich auf die Objekte, die Datentypen, die Beziehungen
untereinander und die Operationen bezieht. Mögliche abstrakte Datenmodelle für die
Modellierung des Schemas sind das relationale Datenmodell und das Entity-RelationshipModell.
2
KAPITEL 2. PHASE 1.1: OPTIMIERUNG DES DATENBANKSCHEMAS
3
Ein erster Ansatzpunkt für die Optimierung im konzenptuellen Schema ist die Zuweisung von Datentypen bei Attributen. Bei der Verwendung von Attributen sind variabel
lange Datentypen oft sehr teuer, wenn zusätzlicher Speicherplatz bei einer Vergrößerung
der Werte beschafft werden muss. So sollte z.B. statt VARCHAR der statische Datentyp
CHAR genutzt werden, falls bekannt ist, dass sich die Größe des Attributs mit hoher
Wahrscheinlichkeit ändern wird, jedoch mit Hinblick auf den grundsätzlich höheren
Speicherbedarf dieses Datentyps. Somit ist im Zusammenhang mit den genutzten Werten
abzuwägen, ob von vorneherein große Datentypen verwendet werden und somit ein hoher
Speicherbedarf in Kauf genommen wird oder ob variable Datentypen genutzt werden, bei
deren Vergrößerung kostspielige Operationen ausgeführt werden müssen.
Ein weiterer Optimierungspunkt sind Tabellen: Beim Anlegen von Tabellen sollte die
Nutzung der Daten in der Anwendung genauso berücksichtigt werden wie die semantischen
Beziehungen der Entitäten sowie die Aspekte der Normalisierung. Bei der Normalisierung
kann eine hohe Anzahl von Tabellen entstehen, die unter Anwendungsaspekten und
bei Auftreten von 1:1-Muss-Beziehungen zusammengefasst werden können. Umgedreht
können auch Tabellen einer vertikalen Partitionierung - analog führt auch eine horizontale
Partitionierung zu mehr und kleineren Tabellen - unterzogen werden, sofern einige
Attribute nur selten genutzt werden, die allerdings bei Anfragen auf die oftgenutzten
Attribute die Suche behindern.
Wie eben bereits angedeutet, bedeutet eine Normalisierung nicht immer die effizienteste
Lösung eines Datenbankkonzepts für die Anwendung. Zwar werden dadurch Redundanzen
vermindert bzw. eliminiert, jedoch kann durch gezielte Denormalisierung - und somit
auch Wiedereinführung von Redundanzen - eine bessere Performance erreicht werden, da
Verbundoperationen umgangen werden, wodurch allerdings ein höherer Aufwand bei der
Wartung der Redundanzen entsteht. Redundanzen sind nicht immer nur exakt doppelt
vorkommende Attribute, die meist vermieden werden sollen. Redundanzen erstrecken sich
auch auf abgeleitete Attribute, womit Atrribute bezeichnet werden, die aus Kombination
bzw. Modifikation anderer Attribute hergeleitet werden können, sofern dies durch das
Datenbanksystem effizient unterstützt wird.
2.3 Internes Schema
Innerhalb des internen Schemas, auch physisches Schema genannt, wird die Datenverwaltung auf der Platte beschrieben sowie Zugriffspfade wie z.B. Indexstrukturen definiert.
Je nach Anwendungsfall kann die Nutzung eines bestimmten Indexes Vorteile bei
Datenbankoperationen bringen. Für das Anlegen eines Indexes auf eine Spalte sprechen
KAPITEL 2. PHASE 1.1: OPTIMIERUNG DES DATENBANKSCHEMAS
4
u.a. die folgenden Gründe: die Spalte wird häufig in Suchprädikaten referenziert, die
spalte bildet einen Primär- oder Fremdschlüssel und/oder die Spalte besitzt eine hohe
Selektivität. Gegen einen Index sprechen folgende Gründe: die Spaltenwerte ändern sich
häufig, die Spalte kann NULL-Werte enthalten und/oder die Spalte gehört zu sehr kleinen
Tabellen.
Neben Indexen auf ein Attribut exisitieren verkettete Indexe, bei denen der Schlüssel aus
zwei und mehr Attributen zusammengesetzt ist. Diese Indexe sind für AND-Argumente in
der WHERE-Klausel einer Anfrage von Vorteil. Ähnlich wird das Überladen von Indexen
genutzt, wenn über den Index auf die gesamte Tabelle zugegriffen werden soll, somit die
angehängten Spalten mitgezogen werden. Dies kann natürlich auch nachteilig sein, sofern
nicht alle Spalten genutzt werden, es wird von nutzlos überladenen Indexen gesprochen.
2.4 Externes Schema
Innerhalb der meist vielfältigen externen Schemata werden - neben Prozeduren und
Funktionen - Sichten, für verschiedene Anwendungen und Benutzergruppen angelegt,
wodurch nur ein gewisser, anwendungsspezifischer Ausschnitt der Daten sichtbar ist.
Nichtbenötigte Daten bleiben verborgen.
Bei der Nutzung von Sichten sollte beachtet werden, dass diese, sofern sie ausschließlich
auf einer Tabelle operieren, besser vermieden werden, da sonst unnötige Verbundoperationen zur Ersetllung der Sicht durchgeführt werden müssen.
Durch Prozeduren, speziell prozedurale SQL-Erweiterungen datenbankinterner Prozeduren, lassen sich Teile der Anwendung in die Bearbeitung durch das Datenbankmanagementsystem übertragen. Außerdem können verschiedene SQL-Anweisungen zusammengefasst,
kompakt übertragen und direkt auf der Datenbank ausgeführt werden. Dadurch werden
Anwendung und Netzwerk, somit die Kommunikationskanäle zwischen Anwendung und
Datenbank, entlastet, jedoch auf Kosten der CPUs des Datenbanksystems, welche einer
höheren Belastung durch die Ausführung der Prozeduren ausgesetzt sind.
3 Phase 1.2: Anwendungsoptimierung
3.1 Ziel
Ähnlich der Optimierung des Datenbankschemas soll durch die Anwendungsoptimierung
die Anzahl der für die Anwendung der Datenbank benötigten Zugriffe auf die Datenbank
minimiert sowie die verbleibenden Zugriffe in der Formulierung ihrer Anfragen optimiert
werden.
Bei der Betrachtung der Daten sowie der Zugriffe auf die Daten der Datenbank
in Hinblick auf eine Anwendungsoptimierung wird eine vorherige Optimierung der
Geschäftsprozesse durch beispielsweise ein Workflow-Management vorausgesetzt. Dies soll
bereits vor Erstellung des Datenbankschemas eine unnötige Belastung des Datenbankmanagementsystems vermeiden sowie die benötigten Daten und Anfragen minimieren.
Von einem optimierten Datenbankschema ausgehend, bieten sich mehrere Ansatzmöglichkeiten für die Anwendungsoptimierung. Diese beziehen sich einerseits auf die
tatsächliche Optimierung der Anwendung sowie auf die Formulierung der SQL-Anweisungen. Ein wichtiger Ansatz ist weiterhin die Optimierung im Mehrbenutzerbetrieb
hinsichtlich Transaktionen und deren Synchronisation.
3.2 Optimierung der Anwendung
Bei der Optimierung der Anwendung wird vorrangig das Vermeiden überflüssiger Daten
in Datenbankanfragen angestrebt. Dadurch wird die Kommunikation mit dem Datenbankmanagementsystem reduziert sowie die Hauptspeicher- und Zugriffseffizienz hinsichtlich
Speicherbedarf, Datenmenge und somit Zugriffszeiten erhöht.
Die Reduktion der Kommunikation zwischen Anwendung und Datenbankmanagementsystem ist ein wichtiges Ziel bei der Optimierung. Bei der Abwägung von satzorientiertem
gegen mengenorientierten Datenzugriff, sollte auf letzteren zurückgegriffen werden sofern
die Anwendungsanforderungen erfüllt werden können. Gegenüber einer wiederholten
satzorientierten Bearbeitung in Schleifen, vermindert eine geschickte mengenorientierte
5
KAPITEL 3. PHASE 1.2: ANWENDUNGSOPTIMIERUNG
6
Bearbeitung den Zugriff auf die Datenbank. Daten können im Nachhinein aus dem
größeren Datensatz durch die Anwendung satzweise bearbeitet werden.
Bei der Formulierung von Datenbankanfragen sollte darauf geachtet werden, dass
strukturgleiche Anfragen identisch formuliert werden. Selbst bei kleinen Unterschieden
- beispielsweise die Verwendung von zwei Leerzeichen zwischen den Worten statt eines
Leerzeichens - kann es dazu führen, dass der Parser des Datenbankmanagementsystems
den Ausführungsplan neu berechnet, wodurch Performance eingebüßt wird. Unterscheiden
sich Anfragen lediglich im Wert des Suchprädikats, können sogenannte Hostvariablen
genutzt werden, eine Art Platzhalter, der durch die jeweiligen Werte ersetzt wird. Der
Parser muß dann den Ausführungsplan nur einmal berechnen. Die Rechenzeit wird
reduziert und Hauptspeicherplatz gespart.
3.3 Optimierung im Mehrbenutzerbetrieb
Durch den Mehrbenutzerbetrieb können Ressourcen besser ausgenutzt werden, da bei
Wartezeiten eines Prozesses ein anderer Prozess die Rechenleistung nutzen kann, bis er
selbst auf Betriebsmittel oder Nutzereingaben warten muß. Für die Kontrolle bezüglich
der Konsistenzerhaltung im Mehrbenutzerbetrieb wird das Prinzip der Isolation aus
dem ACID-Paradigma zugrunde gelegt: Jede Transaktion sieht die Datenbank so, als
sei sie selbst die einzige darauf laufende Anwendung. Beim Konzept der Serialisierbarkeit wird das Konzept der Isolation, als Vorteil der seriellen Ausführung, mit den
Vorteilen des Mehrbenutzerprinzips, erhöhtem Datendurchsatz, kombiniert. Es entstehen
Ausführungspläne von kontrollierten, nebenläufigen und verzahnten Transaktionen. Dabei
ist immer abzuwägen, wieviele Transaktionen parallel ablaufen können und dass dennoch
die Konsistenz der Daten gesichert ist.
Dabei spielt die Synchronisation eine wichtige Rolle, welche eigentlich durch das
Datenbankmanagementsystem übernommen wird. Sollte sie allerdings explizit definiert
werden, sind folgende Regeln zu beachten: Der Sperrmodus sollte abhängig von der
Operation - Lesen oder Schreiben - gewählt werden. Bei Aufeinanderfolgen von Leseund Schreiboperationen auf dasselbe Objekt sollte in den meisten Fällen gleich eine
Schreibsperre angefordert werden, um Verklemmungen zu vermeiden. Es sollten nur die
tatsächlich für die Transaktion benötigten Datensätze, Tabellen oder Seiten gesperrt
werden - bei einer Vielzahl kleiner Datensätze kann es allerdings auch effizienter sein,
die komplette Tabelle zu sperren, da so ein unnötig hoher Synchronisationsaufwand
vermieden werden kann.
KAPITEL 3. PHASE 1.2: ANWENDUNGSOPTIMIERUNG
7
Allgemein sollten Transaktionen durch eine Transaktionsanalyse erfasst werden. Davon
ausgehend sollten Transaktionen möglichst kurz sein, damit Ressourcen nicht zu lange
von einer einzigen Transaktion blockert werden.
3.4 Formulierung von SQL-Anweisungen
Ziel der Anfrageoptimierung sind eine möglichst schnelle Anfragebearbeitung sowie eine
möglichst geringe Anzahl von Seitenzugriffen. Zwar wird diese Aufgabe zumeist vom
Optimierer übernommen, kann aber auch direkt beeinflußt werden. Dabei sind folgende
Ziele zu beachten:
Selektionen sollten so früh wie möglich erfolgen, um Zwischenergebnisse klein zu halten.
Basisoperationen, die wie Selektion und Projektion zusammengefasst werden können,
sollten ohne Zwischenspeicherung von Zwischenergebnissen als ein Berechnungsschritt
realisiert werden.
Es sollten nur Berechnungen ausgeführt werden, die auch einen Beitrag zum Gesamtergebnis liefern. Redundante Operationen, Idempotenzen (z.B. die Vereinigung
einer Relation mit sich selbst) oder nachweisbar leere Zwischenrelationen können aus
Berechnungsplänen entfernt werden.
Das Zusammenfassen gleicher Teilausdrücke ermöglicht die Wiederverwendung von
Zwischenergebnissen.
Zu beachten ist, dass Zwischenergebnisse nicht indexiert werden können.
Verbundoperationen sind bei der Nutzung derselben Datensätze - allerdings ohne
Operationen wie AVG, MIN, MAX - Unteranfragen vorzuziehen.
Bei Unteranfragen sollten die Anfragen mit der höchsten Selektivität die inneren Anfragen darstellen, da diese zwischengespeichert werden müssen, und die Schachtelungstiefe
sollte möglichst gering gehalten werden.
Um kostspielige Sortieroperationen zu vermeiden, sollte die ORDER BY-Funktion
nicht bei bereits in der gewünschten Reihenfolge gespeicherten Daten verwendet werden.
Die Funktionen DISTINCT und UNION sollten vermieden werden, wenn doppelte
Datensätze bereits ausgeschlossen werden können.
In der Regel wird die Optimierung in die drei Phasen logische Optimierung, interne Optimierung und kostenbasierte Optimierung unterteilt - worauf in dieser Arbeit
nicht expliziter eingegangen werden soll - zumeist findet jedoch eine Kombination der
drei Modelle statt, so dass der beste Ausführungsplan basierend auf Heuristiken und
statistischen Informationen erstellt wird.
4 Phase 2: Hauptspeicheroptimierung
4.1 Ziel
Der Hauptspeicher in Datenbannkmanagementsystemen dient der Zwischenspeicherung
von Daten. Diese sind vom Hauptspeicher mit Zugriffszeiten im Nanosekundenbereich
schneller abrufbar als vom Sekundärspeicher, bei dem sich Zugriffszeiten im Millisekundenbereich bewegen. Natürlich können nicht alle Daten im Hauptspeicher liegen, da
dieser zumeist eine Kapazität von lediglich 32 MB bis 1 GB aufweist, im Gegensatz zum
Sekundärspeicher mit Kapazitäten von 1 GB bis mehrere Terrabyte.
Ziel der Hauptspeicheroptimierung ist die Minimierung der Anzahl unnützer physischer
Zugriffe auf den Sekundärspeicher durch eine Optimierung des Hauptspeichers bezüglich
der Verteilung der Ressourcen auf die einzelnen Komponenten des Datenbankpuffers.
Dazu zählen der Datenpuffer, der SQL-/Prozedurpuffer und der Protokollpuffer. Diese
sollten eine bestimmte Menge der Daten beinhalten. Eine einfache Vergrößerung des
Hauptspeichers bringt nur bedingt Performancesteigerungen, da mit größerer Kapazität
und größerer Datenmenge wiederum ein erhöhter Verwaltungsaufwand eintritt.
4.2 Optimierung des Datenbankpuffers
Wie bereits erwähnt, brint eine bloße Vergrößerung des Hauptspeichers nicht automatisch eine Leistungssteigerung. Vielmehr ist es sinnvoll, die Daten des Datenbankpuffers
bezügliche der Semantik der Datenstrukturen aufzuteilen und auf semantisch verschiedene
Puffer aufzuteilen. Den verschiedenen Aufgabenbereichen der Datenbank werden somit optimale Pufferanteile zugewiesen. Dabei sind folgende Komponenten des Datenbankpuffers
sowie deren optimaler Füllgrad zu beachten:
Im Datenpuffer werden die Daten (Tabellen und Indexe) gehalten, auf die zugegriffen
wird. Es sollten möglichst soviele Daten enthalten sein, dass die Mehrzahl der Anfragen
bereits mit dem Zugriff auf den Datenpuffer beantwortet werden können. Es wird eine
Trefferrate von 80-90% empfohlen. Das heißt, dass 80-90% der für die Anfragen benötigten
Daten im Datenpuffer enthalten sind.
8
KAPITEL 4. PHASE 2: HAUPTSPEICHEROPTIMIERUNG
9
Der SQL-/Prozedurpuffer enthält die SQL-Anweisungen und Prozeduren, die bereits
durch das Datenbankmanagementsystem übersetzt und optimiert wurden. Daher sollten
auch SQL-Anweisungen in einheitlicher Form formuliert werden, damit Ausführungspläne
wiederverwendet werden können und nicht ineffizient neu berechnet werden müssen.
Für die im SQL-/Prozedurpuffer enthaltenen Anweisungen und Prozeduren wird eine
Trefferrate von bis zu 99% empfohlen. Somit sollten für eine optimale Nutzung der
Datenbank eigentlich alle Anweisungen darin enthalten sein.
Im Protokollpuffer werden die Transaktionen protokolliert, genauer die Log-Einträge, die
bei Transaktionsende in die Protokolldatei geschrieben werden, zwischengespeichert. Die
Größe des Protokollpuffers ist relativ zur durchschnittlichen Änderungswahrscheinlichkeit
der Daten sowie der Häufigkeit des Schreibens des Protokollpufferinhalts in die Protokolldatei zu wählen. Es wird empfohlen, die Wartezeit gegen 0 laufen zu lassen bzw.
Fehlversuche beim Schreiben der Protokolldatei unter 5% zu halten.
Ausgehend von den eben vorgestellten optimalen Größen der einzelnen Datenbankpufferelemente, ist die optimale Größe des gesamten Datenbankpuffers zu ermitteln.
Basierend auf einer optimalen Größe in Relation zur Gesamtgröße des Haupspeichers
sowie der optimalen Größe der einzelnen Elemente wird der Speicher zugeteilt, wobei
der SQL-/Prozedurpuffer und der Protokollpuffer höhere Priorität besitzen, da es zu
Wartezeiten und Performanceeinbußen kommen kann, wenn Transaktionen bei gefülltem
Protokollpuffer ihre Änderungen nicht protokollieren können bzw. Ausführungspläne
aufwendig berechnet werden müssen, sofern sie nicht im Puffer enthalten sind.
4.3 Optimierer
Der Optimierer eines Datenbankmanagementsystems berechnet die Ausführungspläne,
die geeignetste Strategie für den Datenzugriff bei Datenbankanfragen, wobei er kostengünstige Operationen nach vorne zieht und kostspielige Operationen anhängt. Der
Optimierung liegen die zwei Varianten regelbasierte und kostenbasierte Optimierung
zugrunde. Die regelbasierte Optimierung bezieht sich auf das Erkennen kostengünstiger,
primär auszuführender Operationen anhand der Syntax. Die kostenbasierte Optimierung
dagegen umfasst das Erkennen tatsächlich kostengünstigster Operationen anhand von
Statistiken. Dabei ist natürlich vorausgesetzt, dass das System über aktuelle statistische
Angaben bezüglich der Anzahl der Datensätze und der Selektivität der Attribute verfügt,
welche optimalerweise bei zuvoriger niedriger Datenbanklast berechnet wurden. Die
Vorgehensweise des Optimierers kann durch Planhinweise beeinflußt werden, welche die
KAPITEL 4. PHASE 2: HAUPTSPEICHEROPTIMIERUNG
10
Wahl des Optimierers, die Nutzung bzw. das Übergehen von Indexen, die Festlegung
der Reihenfolge von Verbundoperationen sowie die Ausführung von Verbundoperationen
betreffen.
Im folgenden sind die Einflußmöglichkeiten am Beispiel von Oracle und DB2 dargestellt.
Der DB2-Optimierer kann durch Angabe einer der folgenden Optimierungsklassen
beeinflußt werden:
• Klasse 0 führt eine minimale Optimierung durch, die bei einfachen, interaktiven
Anfragen genutzt werden sollte
• Klasse 1 führt keine Auswertung von Attributwertverteilungen zur Selektivitätsabschätzung durch
• Klasse 2 nutzt Informationen über Attributwertverteilungen
• Klasse 3 nutzt dynamische Programmierung zur Planauswahl
• Klasse 5 ist der Defaultwert, für interaktive Anfragen werden Heuristiken zur
Einschränkung des Suchraumes verwendet
• Klasse 7 wie Klasse 5, ohne Einschränkung des Suchraumes
• Klasse 9 nutzt alle Optimierungstechniken, die DB2 zur Verfügung stehen
In Oracle stehen die zwei Varianten regelbasierte Optimierung und kostenbasierte Optimierung zur Verfügung. Der Optimierer kann auf drei Arten beeinflußt werden: durch
Angaben in der Initialisierungsdatei init.ora, durch Setzen von Parametern für einzelne
Sitzungen mittels ALTER SESSION und durch Hints für Einzelanfragen. Die folgenden
Modi können eingestellt werden:
choose: Das System übernimmt die Auswahl zwischen regelbasierter und kostenbasierter
Optimierung. Bei Vorliegen statistischer Angaben wird auf die kostenbasierte
Optimierung zurückgegriffen.
all rows: Optimiert wird bezüglich der Zeit der Bereitstellung des Gesamtergebnisses.
first rows: Optimiert wird bezüglich der Zeit der Bereitstellung der ersten Tupel des
Gesamtergebnisses.
rule: Optimiert wird ausschließlich über regelbasierte Optimierung.
KAPITEL 4. PHASE 2: HAUPTSPEICHEROPTIMIERUNG
11
Hints, dir nur bei der kostenbasierten Optimierung erkannt werden, beeinflussen den
gewählten Optimierungsmodus, die Auswahl konkreter Algorithmen, die Auswahl von
Indexen, die Reihenfolge der Berechnung und weitergehende Optimierungsparameter wie
beispielsweise den Parallelisierungsgrad von Anfragen.
5 Phase 3: Eingabe-/Ausgabeoptimierung
5.1 Ziel
Die Eingabe-/Ausgabeoptimierung bzw. Optimierung der Sekundärspeicherzugriffe soll
die verbleibenden Zugriffe auf den Sekundärspeicher optimieren. Dies wird durch gezielte
Beeinflussung der physischen Struktur des Speichers erwirkt, durch Verteilung der Eingabe/Ausgabelast auf verschiedene Festplatten sowie durch Umgehung gewisser Funktionen
des Betriebssystems.
5.2 Betriebssystemfunktionen
Für die Steigerung der Performance eines Datenbankmanagementsystems kann es sinnvoll
sein, gewisse Betriebssystemfunktionen zu umgehen. Beim durch das Betriebssystem
gesteuerten Schreiben von Daten durchlaufen die Daten den Datenbankpuffer, den
Hauptspeicherpuffer und den Dateisystempuffer bevor sie in die Dateien der Datenbank
geschrieben werden. Für das Schreiben großer Datenmengen bedeutet dies einen hohen
Rechenaufwand. Durch den Einsatz eines Raw Devices 1 können diese Zwischenstationen umgangen werden, ein direkter Zugriff auf die Festplatte wird ermöglicht. Dem
gegenüber steht allerdings ein dadurch bedingter erhöhter Administrationsaufwand bei
der erforderlichen Datensicherung.
5.3 Lastverteilung
Im Zuge der Sekundärspeicheroptimierung sollte eine geschickte Lastverteilung vorgenommen werden. Dazu werden beispielsweise die Blöcke auf unterschiedliche Datenträger
verteilt, wodurch ein paralleler Zugriff auf die Daten ermöglicht wird. Ebenso ist eine
Trennung von Tabellendaten und den zugehörigen Indexdateien sinnvoll. Dies macht sich
1
Ein Raw Device bzw. Raw Partition ist eine zeichenorientierte Gerätedatei, die den direkten Zugriff
auf eine Festplattenpartition erlaubt. Das Raw Device abstrahiert die Daten nicht über ein Dateisystem. Beim Zugriff auf das Device wird die Datenträgerverwaltung des Betriebssystems weitgehend
umgangen.
12
KAPITEL 5. PHASE 3: EINGABE-/AUSGABEOPTIMIERUNG
13
besonders bei Vorgängen wie Neuindexierung, Reindexierung sowie dem Schreiben von
Datensätzen positiv bemerkbar. Ebenso wird dadurch der seriell ablaufende Datenimport
optimiert, wenn die Daten nicht zwischendurch im Datenbankpuffer abgelegt werden
können.
Weiterhin sollte eine Partitionierung vorgenommen werden. Diese betrifft vor allem
an Verbundoperationen beteiligte Daten, die auf verschiedene Datenträger abgelegt
werden. Dadurch werden Selektionen parallelisierbar gemacht. Bei der Verwaltung großer
Datenmengen empfiehlt sich eine horizontale Partionierung der Daten auf verschiedene
Festplatten. Weiterhin sollten auch Datendateien und Protokolldateien auf verschiedenen
Festplatten abgelegt werden.
Abgesehen von der Verteilung der Daten und Verwaltungsdateien wird bezügliche der
Hardware der Einsatz eines RAID-Verbundes empfohlen. Besonders die Kombination aus
RAID 0, welches das Striping ermöglicht, sowie RAID 1, wodurch eine Spiegelung der
Daten erreicht wird. Diese dient der Sicherung der Daten.
5.4 Optimierung der physischen Speicherstrukturen
Bei Festlegung der Blockgröße, welche gleichfalls die Größe der Seite betrifft, sind
folgende Aspekte relevant für eine effiziente Nutzung des Datenbankpuffers: Es sollte ein
möglichst geringer Anteil an Verwaltungsinformationen enthalten sein, es sollten lediglich
gewünschte Daten enthalten sein, es sollte möglichst wenig freier Platz bei Lesezugriffen
und möglichst viel freier Platz bei Schreibzugriffen vorhanden sein. Da diese Aspekte
jedoch nicht einfach umsetzbar sind, sollten besonders die Anforderungen der Anwendung
berücksichtigt werden, da diese Aufschluß über die häufigsten Operationen geben können.
Allgemein spricht für die Verwendung kleiner Blöcke, dass dadurch weniger Bedarf
an Datenbankpufferplatz besteht und die Wahrscheinlichkeit nicht benötigter Daten
sowie die Konfliktwahrscheinlichkeit minimiert werden. Nachteilig ist allerdings, dass
Verwaltungsinformationen in einem schlechten Verhältnis zu den Nutzdaten stehen.
Große Blöcke sind optimal bei Tabellen mit großen Datensätzen verbunden mit einer
Minimierung der Anzahl der Blöcke. Weiterhin sind große Blöcke bei sortierten und
geclusterten Datensätzen zu bevorzugen. Einen Nachteil stellt dabei jedoch die größere
Höhe der Indexbäume dar.
Clustertechniken ermöglichen einen effizienten und schnelleren Zugriff auf zusammenhängende Datensätze. Jedoch werden Anweisungen ohne Cluster Key langsam abgefertigt und es ist zu beachten, dass die Blockgröße ausreichend groß für Einfügeoperationen
gewählt wird.
KAPITEL 5. PHASE 3: EINGABE-/AUSGABEOPTIMIERUNG
14
Für eine Laufzeitverbesserung ist zuweilen eine Reorganisation der Speicherstrukturen
unumgänglich. Dabei werden Datensätze, die durch den laufenden Betrieb über mehrere Blöcke verteilt wurden, wieder vereint. Auch Tabellen, die über mehrere Blöcke
verteilt sind, werden defragementiert und wieder zusammengefügt. Ebenso wird mit
Clustern verfahren. Diese Reorganisation, wie auch das Löschen von Datensätzen, zieht
eine Neuberechnung der Indexe nach sich, so dass diese wieder schmalere Binärbäume
darstellen.
6 Zusammenfassung
Die Optimierung von Datenbanken umfasst 4 Phasen: die Optimierung des Datenbankschemas und der Anwendung, die Hauptspeicheroptimierung, die Eingabe-/Ausgabeoptimierung
und die Konfliktoptimierung. Diese 4 Phasen berücksichtigen die theoretische Formierung der Datenbank ebenso wie die Anwendung an sich, die physichen Strukturen des
Datenbankmanagementsystems sowie die SQL-Syntax. Ziel der Optimierung ist eine
allgemeine Performancesteigerung des Datenbankmanagementsystems, welche sich durch
eine Laufzeitverbesserung verbunden mit erhöhtem Datendurchsatz auszeichnet. Damit
wird auch der Kauf zusätzlicher Hardware unterbunden und eine mittel- bis langfristig
günstigere Wartung erreicht.
Innerhalb der einzelnen Phasen der Optimierung wird die Anzahl der für die Anwendung
der Datenbank benötigten Zugriffe auf die Datenbank minimiert sowie die verbleibenden
Zugriffe in der Formulierung ihrer Anfragen optimiert. Dies erfolgt bereits in der ersten
Phase, bei der Erstellung des Datenbankschemas, wobei auf allen drei Ebenen der DreiSchema-Architektur Möglichkeiten für die Optimierung des Datenbankschemas bestehen.
Ebenso erfolgt eine tatsächliche Optimierung der Anwendung sowie eine Optimierung
der Formulierung der SQL-Anweisungen.
In Phase 2, der Hauptspeicheroptimierung, werden die unnützen physischen Zugriffe auf
den Sekundärspeicher minimiert. Dies erfolgt durch eine Optimierung des Hauptspeichers
bezüglich der Verteilung der Ressourcen auf die einzelnen Komponenten des Datenbankpuffers. Die Einhaltung optimaler Trefferraten für Datenpuffer, SQL-/Prozedurpuffer
und Protokollpuffer erhöhen die Effizenz des Datenbankmanagementsystems.
Nach der Minimierung der Sekundärspeicherzugriffe werden die verbleibenden Zugriffe
in Phase 3, der Eingabe-/Ausgabeoptimierung, optimiert. Dies wird durch gezielte Beeinflussung der physischen Struktur des Speichers erwirkt, durch Verteilung der Eingabe/Ausgabelast auf verschiedene Festplatten sowie durch Umgehung gewisser Funktionen
des Betriebssystems.
In Phase 4, der Konfliktoptimierung, werden system- und anwendungsabhängig, verbleibende Zugriffskonflikte gelöst.
15
7 Quellenverzeichnis
Kempler, A. und A. Eickler: Datenbanksysteme, 6. Auflage - München: Oldenbourg
Wissenschaftsverlag GmbH, 2006. ISBN 978-3-486-57690-0
Kudraß, Thomas (Hrsg.): Taschenbuch Datenbanken - Leipzig: Carl Hanser Verlag,
2007. ISBN 978-3-446-40944-6
Saake, Gunter: Datenbanken: Implementierungstechniken / Gunter Saake; Andreas
Heuer - Bonn: MITP-Verlag GmbH, 1999. ISBN 3-8266-0513-6
16
Herunterladen