Am 16. November 2016 kündigte Microsoft einige sehr wichtige Änderungen für SQL Server 2016 Standard Edition an, die in implementiert wurden SQL Server 2016 Service Pack 1 (Build 13.0.4001.0). Viele sehr nützliche Programmierbarkeitsfunktionen, die zuvor nur in der Enterprise Edition verfügbar waren, werden jetzt in der Standard Edition (und auch in der Web Edition und sogar in der Express Edition) verfügbar sein.
Sobald Sie eine Datenbankanwendung haben, die SQL Server 2016 Standard Edition Service Pack 1 (oder sogar eine niedrigere Edition) verwendet, können Sie einfach ein Editions-Upgrade auf die Enterprise Edition durchführen, um noch mehr Skalierbarkeit und Leistung zu erhalten, indem Sie die höheren Lizenzbeschränkungen für Sockets nutzen , Kerne und Arbeitsspeicher in der Enterprise Edition, wie hier beschrieben.
Sie profitieren außerdem von den vielen anderen intrinsischen Leistungsvorteilen der Enterprise Edition, zusammen mit zahlreichen Verbesserungen der Verwaltung, die Ihr Leben als DBA so viel einfacher machen.
Columnstore-Indizes
Wenn Sie Columnstore-Indizes verwenden, erhalten Sie automatisch die folgenden Leistungsvorteile, wenn Sie die Enterprise Edition verwenden:
- Aggregierter Pushdown: Diese Leistungsfunktion führt häufig zu einer 2- bis 4-fachen Abfrageleistungssteigerung, indem qualifizierte Aggregate an den SCAN-Knoten gepusht werden, wodurch die Anzahl der Zeilen reduziert wird, die aus diesem Iterator kommen.
- Indexaufbau/Neuaufbau: Die Enterprise Edition kann Columnstore-Indizes mit mehreren Prozessorkernen erstellen/neu erstellen, während die Standard Edition nur einen Prozessorkern verwendet. Dies hat abhängig von Ihrer Hardware einen ziemlich erheblichen Einfluss auf die verstrichene Zeit für diese Vorgänge.
- Lokale Aggregate: Enterprise Edition kann lokale Aggregationen verwenden, um die Anzahl der Zeilen zu filtern, die einen SCAN-Knoten verlassen, wodurch der Arbeitsaufwand reduziert wird, der von nachfolgenden Abfrageknoten erledigt werden muss. Sie können dies überprüfen, indem Sie im XML-Code des Ausführungsplans für die Abfrage nach dem Attribut „ActualLocallyAggregatedRows“ suchen.
- Single Instruction Multiple Data (SIMD)-Optimierungen: Diese Funktion verwendet einen Satz von Hardwarebefehlen, die in der Lage sind, ein Array von Daten in einem einzigen Befehl zu verarbeiten, wodurch aggregierte Operationen erheblich beschleunigt werden. Diese Hardwareanweisungen sind auf allen modernen Prozessoren vorhanden (die AVX-Unterstützung haben), aber sie werden nur von der Enterprise Edition verwendet.
- String-Prädikat-Pushdown: Diese Leistungsfunktion kann die Leistung von Abfragen verbessern, die Prädikate für Zeichenfolgenspalten verwenden, indem diese Prädikate an den SCAN-Knoten übertragen werden. Dies kann den Arbeitsaufwand, der von nachfolgenden Knoten erledigt werden muss, erheblich reduzieren.
- Grad der Parallelität: Abfragen im Stapelmodus sind in der Standard Edition auf MAXDOP =2 beschränkt. Enterprise Edition kann alle Kerne verwenden, die für die Instanz vorhanden sind. Dies kann bei größeren Abfragen auf typischer, moderner Serverhardware sehr wichtig sein.
- Speichergrenzen: Der Columnstore-Objektpool ist in der Standard Edition auf 32 GB pro Instanz beschränkt. Enterprise Edition hat keine Speicherbeschränkung für den Columnstore-Objektpool.
Um diese Leistungsangaben zu testen, habe ich einige relativ einfache Tests in der Microsoft ContosoRetailDW-Datenbank auf meiner Intel Core i7-6700K-Workstation durchgeführt. Ich habe zwei benannte Instanzen von SQL Server 2016 SP1 installiert, eine mit Standard Edition und die andere mit Developer Edition (entspricht der Enterprise Edition).
Alle Konfigurationen und Eigenschaften auf Instanzebene und Datenbankebene sind zwischen den beiden Instanzen identisch, und die Speicherorte der Benutzer- und tempdb-Datenbankdateien befinden sich in separaten Verzeichnissen auf demselben separaten Flash-Speichergerät für jede Instanz. Der Datenbank-Kompatibilitätsgrad wurde in beiden Fällen auf 130 geändert, und die zugrunde liegende Windows-Konfiguration und -Hardware ist für beide Instanzen gleich. Der einzige Unterschied hier ist die Edition jeder Instanz.
Der erste Test ist eine einfache Abfrage (angepasst von Niko Neugebauer), die es SQL Server 2016 ermöglicht, Aggregat-Pushdown für die FactOnlineSales-Tabelle zu verwenden. Die Ergebnisse sind in Tabelle 1 gezeigt.
Ausgabe | Verstrichene Zeit (ms) |
---|---|
Standardausgabe | 30 |
Entwicklerversion | 1 |
Zeitunterschied | 29 |
Verbesserung in % | 96,7 % |
Tabelle 1:Aggregierter Pushdown-Vergleich
Der nächste Test ist die Zeitmessung, wie lange es dauert, einen gruppierten Columnstore-Index für die Tabelle FactOnlineSales mit 12,6 Millionen Zeilen zu erstellen. Die Ergebnisse sind in Tabelle 2 gezeigt.
Ausgabe | Verstrichene Zeit (ms) |
---|---|
Standardausgabe | 42.197 |
Entwicklerversion | 14.384 |
Zeitunterschied | 27.813 |
Verbesserung in % | 65,9 % |
Tabelle 2:Vergleich der Erstellung von Clustered Columnstore-Indizes
Der nächste Test ist die Zeitmessung, wie lange es dauert, einen gruppierten Columnstore-Index für dieselbe FactOnlineSales-Tabelle neu zu erstellen. Die Ergebnisse sind in Tabelle 3 gezeigt.
Ausgabe | Verstrichene Zeit (ms) |
---|---|
Standardausgabe | 33.105 |
Entwicklerversion | 11.460 |
Zeitunterschied | 21.645 |
Verbesserung in % | 65,4 % |
Tabelle 3:Neuaufbau des Clustered Columnstore-Indexvergleichs
Der nächste Test ist eine weitere einfache Abfrage, die es SQL Server 2016 ermöglicht, die lokale Aggregation für die FactOnlineSales-Tabelle zu verwenden. Die Ergebnisse sind in Tabelle 4 gezeigt.
Ausgabe | Verstrichene Zeit (ms) |
---|---|
Standardausgabe | 122 |
Entwicklerversion | 83 |
Zeitunterschied | 39 |
Verbesserung in % | 32,0 % |
Tabelle 4:Lokaler Aggregationsvergleich
Der nächste Test ist eine weitere einfache Abfrage, die es SQL Server 2016 ermöglicht, String-Prädikat-Pushdown für die Tabellen FactOnlineSales und DimPromotion zu verwenden. Die Ergebnisse sind in Tabelle 5 gezeigt.
Ausgabe | Verstrichene Zeit (ms) |
---|---|
Standardausgabe | 2.683 |
Entwicklerversion | 1.221 |
Zeitunterschied | 1.466 |
Verbesserung in % | 54,6 % |
Tabelle 5:String-Prädikat-Pushdown-Vergleich
Dies sind nur einige einfache Beispiele der integrierten Leistungsvorteile für Columnstore-Indizes in SQL Server 2016 Enterprise Edition im Vergleich zu SQL Server 2016 Standard Edition auf derselben Hardware. Wenn Sie wirklich in die Columnstore-Indizes eintauchen möchten (was für einige Workloads eine sehr effektive Funktion sein kann), sollten Sie die lange Reihe von Posts von Niko Neugebauer auf columnstore.net mit einem Lesezeichen versehen und lesen.
DBCC CHECKDB-Leistung
Eine weitere Verbesserung der Verwaltbarkeitsleistung, die in SQL Server 2016 Enterprise Edition vorhanden ist, ist die Leistung von DBCC CHECKDB. In der Standard Edition verwendet DBCC CHECKDB nur einen Prozessorkern, während es in der Enterprise Edition alle verfügbaren Kerne verwenden kann. Dieses Verhalten ist gegenüber früheren Versionen von SQL Server unverändert. SQL Server 2016 ermöglicht es Ihnen, die Anzahl der Kerne zu beschränken, die DBCC CHECKDB mit einer neuen Option WITH (MAXDOP =x) verwenden kann.
Das Ausführen von DBCC CHECKDB mit der Option WITH PHYSICAL_ONLY auf einer etwas größeren Datenbank (ungefähr 38 GB), die ich habe, ergab die in Tabelle 6 gezeigten Ergebnisse.
Ausgabe | Verstrichene Zeit (ms) |
---|---|
Standardausgabe | 58.492 |
Entwicklerversion | 24.897 |
Zeitunterschied | 33.595 |
Verbesserung in % | 57,4 % |
Tabelle 6:DBCC CHECKDB MIT PHYSICAL_ONLY-Vergleich
Das Ausführen einer standardmäßigen DBCC CHECKDB auf derselben Datenbank ergab die in Tabelle 7 gezeigten Ergebnisse.
Ausgabe | Verstrichene Zeit (ms) |
---|---|
Standardausgabe | 435.039 |
Entwicklerversion | 119.767 |
Zeitunterschied | 315.272 |
Verbesserung in % | 72,5 % |
Tabelle 7:DBCC CHECKDB-Vergleich
Ein sehr wichtiger Faktor für die Leistung von DBCC CHECKDB ist die sequentielle Leseleistung von allen LUNs, in denen sich Ihre Datenbankdatendatei(en) befinden. Sie können dies leicht überprüfen, indem Sie einen BACKUP DATABASE-Befehl auf einem NUL-Gerät ausführen (achten Sie darauf, die Optionen COPY_ONLY und NO_COMPRESSION zu verwenden). Dies zeigt Ihnen Ihre effektive sequentielle Leseleistung, wie in diesem Beispiel von meiner Workstation gezeigt:
BACKUP DATABASE verarbeitete erfolgreich 5048514 Seiten in 16,115 Sekunden (2447,502 MB/s).Denken Sie daran, dass all diese Tests auf einem einzelnen Quad-Core-Desktop-Prozessor durchgeführt wurden. Ein Multi-Socket-Server mit insgesamt viel mehr Prozessorkernen zeigt in vielen dieser Tests eine noch stärkere Leistungssteigerung.
Der Sinn all dessen besteht darin, einige konkrete Beispiele der Leistungsverbesserungen zu zeigen, die Sie sehen können, indem Sie einfach von SQL Server 2016 Standard Edition SP1 auf SQL Server 2016 Enterprise Edition SP1 auf derselben Hardware aktualisieren, ohne Datenbank- oder Anwendungsänderungen vorzunehmen . Diese Liste ist keineswegs vollständig, da es noch viele andere Vorteile gibt.