Partitionseinteilung
Das Partitionieren einer Datenbank verbessert die Leistung und vereinfacht die Verwaltung. Wenn Sie eine größere Tabelle in kleinere Einzeltabellen aufteilen, können Abfragen, die nur auf einen Teil der Daten zugreifen, schneller ausgeführt werden, da weniger Daten gescannt werden müssen. Darüber hinaus können Wartungsaufgaben, wie z. B. das erneute Erstellen von Indizes oder das Sichern einer Tabelle, schneller ausgeführt werden.
Die Partitionierung kann auch ohne Aufteilen von Tabellen erreicht werden, indem die Tabellen physisch auf verschiedenen Datenträgern platziert werden. Wenn eine Tabelle auf einem physischen Laufwerk und die zugehörigen Tabellen auf einem anderen Laufwerk gespeichert werden, verbessert sich die Leistung bei Abfragen, die Verknüpfungen zwischen den Tabellen enthalten, da mehrere Leseköpfe gleichzeitig Daten lesen können. Mit SQL Server-Dateigruppen können Sie angeben, auf welchen Datenträgern die Tabellen gespeichert werden sollen.
Hardwareorientierte Partitionierung
Bei der hardwareorientierten Partitionierung wird die Datenbank so entworfen, dass die Vorteile der verfügbaren Hardwarearchitektur genutzt werden. Die folgenden Beispiele zeigen die hardwareorientierte Partitionierung:
Multiprozessoren, die mehrere Ausführungsthreads zulassen, sodass viele Abfragen gleichzeitig ausgeführt werden können. Aber auch eine einzelne Abfrage kann mit mehreren Prozessoren schneller ausgeführt werden, da die gleichzeitige Ausführung der Komponenten der Abfrage ermöglicht wird. Beispielsweise können alle Tabellen, auf die in der Abfrage verwiesen wird, gleichzeitig in verschiedenen Threads gescannt werden.
Auf RAID-Medien können Daten auf mehrere Datenträger verteilt werden, sodass ein schnellerer Datenzugriff möglich wird, da mehrere Lese-/Schreibköpfe gleichzeitig Daten lesen. Eine Tabelle, die auf mehrere Laufwerke verteilt ist, kann in der Regel schneller gescannt werden als dieselbe Tabelle, wenn sie auf einem einzigen Laufwerk gespeichert wird. Auch kann das separate Speichern von Tabellen und verwandten Tabellen die Leistung von Abfragen, die diese Tabellen verknüpfen, deutlich steigern. Weitere Informationen finden Sie unter RAID.
Horizontale Partitionierung
Bei der horizontalen Partitionierung wird eine Tabelle auf mehrere Tabellen aufgeteilt. Jede dieser Tabellen verfügt über die gleiche Anzahl von Spalten, jedoch über eine geringere Anzahl an Zeilen. Beispielsweise könnte eine Tabelle, die 1 Million Zeilen enthält, horizontal in 12 kleinere Tabellen partitioniert werden, wobei jede Tabelle die Daten für einen Monat eines bestimmten Jahres enthält. Abfragen, die sich auf Daten eines bestimmten Monats beziehen, verweisen dann nur auf die entsprechende Monatstabelle.
Auf welche Weise die horizontale Partitionierung vorgenommen wird, hängt davon ab, wie die Daten analysiert werden sollen. Sie sollten die Tabellen so partitionieren, dass Abfragen auf möglichst wenige Tabellen verweisen. Anderenfalls sinkt möglicherweise die Leistung, wenn umfangreiche UNION-Abfragen verwendet werden müssen, um die Tabellen zur Abfragezeit logisch zusammenzuführen. Weitere Informationen zum Abfragen von horizontal partitionierten Tabellen finden Sie unter Szenarien für das Verwenden von Sichten.
Häufig werden Daten horizontal nach Alter und Verwendung partitioniert. Beispielsweise enthält eine Tabelle Daten aus den letzten fünf Jahren, wobei jedoch nur auf die Daten des laufenden Jahres regelmäßig zugegriffen wird. In diesem Fall empfiehlt es sich, die Daten in fünf Tabellen zu partitionieren, sodass jede Tabelle Daten aus nur einem Jahr enthält.
Weitere Informationen finden Sie unter Partitionierte Tabellen und Indizes.
Vertikale Partitionierung
Bei der vertikalen Partitionierung wird eine Tabelle in mehrere Tabellen mit weniger Spalten aufgeteilt. Bei der vertikalen Partitionierung werden zwei Arten unterschieden: Normalisierung und Zeilensplitting:
Normalisierung ist der standardmäßige Datenbankprozess, bei dem redundante Spalten aus einer Tabelle entfernt und in sekundäre Tabellen platziert werden, die mit der primären Tabelle über einen Primärschlüssel und Fremdschlüssel verknüpft sind.
Beim Zeilensplitting wird die Ausgangstabelle vertikal in Tabellen mit weniger Spalten aufgeteilt. Jede logische Zeile in einer geteilten Tabelle entspricht derselben logischen Zeile in den anderen Tabellen entsprechend der Identifizierung durch eine UNIQUE KEY-Spalte, die in allen partitionierten Tabellen identisch ist. Beispielsweise wird durch Verknüpfen der Zeile mit der ID 712 jeder geteilten Tabelle die ursprüngliche Zeile neu erstellt.
Bei der horizontalen Partitionierung scannen Abfragen ebenso wie bei der vertikalen Partitionierung weniger Daten. Die Abfrageleistung wird somit verbessert. Wenn beispielsweise in einer Tabelle mit sieben Spalten in der Regel nur auf die ersten vier Spalten verwiesen wird, ist es vorteilhaft, die letzten drei Spalten in einer separaten Tabelle zu platzieren.
Die vertikale Partitionierung muss sorgfältig überlegt werden, da beim Analysieren von Daten aus mehreren Partitionen Abfragen erforderlich sind, die Tabellen verknüpfen. Sehr große Partitionen können sich bei der vertikalen Partitionierung auch negativ auf die Leistung auswirken.
Siehe auch