Entwerfen von Partitionen zum Steigern der Abfrageleistung

Das Partitionieren einer Tabelle oder eines Indexes kann – abhängig von den am häufigsten ausgeführten Abfragetypen sowie der Hardwarekonfiguration – die Abfrageleistung verbessern.

Partitionieren für Verknüpfungsabfragen

Wenn Sie häufig Abfragen ausführen, die Gleichheitsverknüpfungen zwischen mindestens zwei partitionierten Tabellen voraussetzen, sollten deren Partitionsspalten dieselben sein wie die Spalten, an denen die Tabellen verknüpft sind. Außerdem sollten die Tabellen oder deren Indizes aufeinander abgestimmt sein (Kollokation). Dies bedeutet, dass sie entweder dieselbe benannte Partitionsfunktion verwenden oder aber verschiedene Partitionsfunktionen, die sich in folgenden wesentlichen Punkten entsprechen:

  • Sie besitzen dieselbe Anzahl an Parametern für die Partitionierung, und die entsprechenden Parameter sind vom selben Datentyp.

  • Sie definieren dieselbe Anzahl an Partitionen.

  • Sie definieren dieselben Begrenzungswerte für Partitionen.

Dies ermöglicht dem SQL Server-Abfrageoptimierer, die Verknüpfung schneller zu verarbeiten, da die Partitionen selbst verknüpft werden können. Wenn eine Abfrage zwei Tabellen verknüpft, die nicht durch Kollokation aufeinander abgestimmt sind oder nicht am Verknüpfungsfeld miteinander verknüpft sind, kann das Vorhandensein von Partitionen die Abfrageverarbeitung womöglich sogar verlangsamen, anstatt zu beschleunigen.

Nutzen der Vorteile von mehreren Datenträgern

Es scheint verlockend, Partitionen Dateigruppen zuzuordnen, die jeweils auf verschiedene physikalische Datenträger zugreifen, um die E-A-Leistung zu verbessern. Beim Sortieren von Daten nach E-A-Operationen geht SQL Server jedoch zunächst nach Partitionen vor. In diesem Szenario greift SQL Server jedoch zu jeder Zeit auf ein einziges Laufwerk zu, und dadurch kann die Leistung möglicherweise verringert werden. Hinsichtlich der Leistung besteht die bessere Lösung darin, die Datendateien der Partitionen über mehrere Datenträger zu verteilen, d. h. ein RAID (Redundant Array of Independent Disks) einzurichten. Auf diese Weise kann SQL Server, obwohl die Daten dabei weiterhin nach Partitionen sortiert werden, auf alle Laufwerke der einzelnen Partitionen gleichzeitig zugreifen. Diese Konfiguration kann unabhängig davon, ob alle Partitionen sich in der gleichen oder in verschiedenen Dateigruppen befinden, geplant werden. Weitere Informationen zur Funktionsweise von SQL Server mit verschiedenen RAID-Stufen finden Sie unter RAID-Stufen und SQL Server.

Steuern des Sperrenausweitungsverhaltens

Durch die Partitionierung von Tabellen kann die Leistung verbessert werden, da eine Sperrenausweitung auf eine einzelne Partition statt auf die gesamte Tabelle ermöglicht wird. Verwenden Sie die LOCK_ESCALATION-Option der ALTER TABLE-Anweisung, um eine Sperrenausweitung auf die Partition zuzulassen und damit Sperrenkonflikte zu verringern.