Op 16 november 2016 kondigde Microsoft enkele zeer belangrijke wijzigingen aan voor SQL Server 2016 Standard Edition, die in SQL Server 2016 Service Pack 1 (build 13.0.4001.0). Veel zeer nuttige programmeerfuncties die voorheen alleen beschikbaar waren in Enterprise Edition, zijn nu beschikbaar in Standard Edition (en ook in Web Edition en zelfs Express Edition).
Zodra u een databasetoepassing hebt die SQL Server 2016 Standard Edition Service Pack 1 (of zelfs een lagere editie) gebruikt, kunt u gewoon een editie-upgrade uitvoeren naar Enterprise Edition om nog meer schaalbaarheid en prestaties te krijgen, gebruikmakend van de hogere licentielimieten voor sockets , cores en geheugen in Enterprise Edition, zoals hier beschreven.
U krijgt ook de vele andere intrinsieke prestatievoordelen die aanwezig zijn in Enterprise Edition, samen met meerdere verbeteringen in de beheerbaarheid die uw leven als DBA zoveel gemakkelijker maken.
Columnstore-indexen
Als u Columnstore-indexen gebruikt, krijgt u automatisch de volgende prestatievoordelen wanneer u Enterprise Edition gebruikt:
- Totale pushdown: Deze prestatiefunctie levert vaak een prestatiewinst van 2X-4X op door kwalificerende aggregaten naar het SCAN-knooppunt te pushen, waardoor het aantal rijen dat uit die iterator komt, wordt verminderd.
- Index bouwen/herbouwen: Enterprise Edition kan columnstore-indexen bouwen/herbouwen met meerdere processorcores, terwijl Standard Edition slechts één processorcore gebruikt. Dit heeft een behoorlijk significant effect op de verstreken tijd voor deze bewerkingen, afhankelijk van uw hardware.
- Lokale aggregaten: Enterprise Edition kan lokale aggregaties gebruiken om het aantal rijen te filteren dat uit een SCAN-knooppunt komt, waardoor de hoeveelheid werk die moet worden gedaan door volgende query-knooppunten wordt verminderd. U kunt dit bevestigen door te zoeken naar het attribuut "ActualLocallyAggregatedRows" in de XML van het uitvoeringsplan voor de query.
- Single Instruction Multiple Data (SIMD) optimalisaties: Deze functie maakt gebruik van een set hardware-instructies die in staat zijn om een reeks gegevens in een enkele instructie te verwerken, waardoor de totale bewerkingen aanzienlijk worden versneld. Deze hardware-instructies zijn aanwezig op alle moderne processors (die AVX-ondersteuning hebben), maar ze worden alleen gebruikt door Enterprise Edition.
- String predikaat pushdown: Deze prestatiefunctie kan de prestaties van query's met predikaat(en) op tekenreekskolommen verbeteren door deze predikaten naar het SCAN-knooppunt te pushen. Dit kan de hoeveelheid werk die moet worden gedaan door volgende knooppunten aanzienlijk verminderen.
- Graad van parallellisme: Query's in batchmodus zijn beperkt tot MAXDOP =2 in Standard Edition. Enterprise Edition kan alle cores gebruiken die voor de instance aanwezig zijn. Dit kan erg belangrijk zijn bij grotere zoekopdrachten op typische, moderne serverhardware.
- Geheugenlimieten: De Columnstore-objectpool is beperkt tot 32 GB per instantie op Standard Edition. Enterprise Edition heeft geen geheugenbeperking voor de Columnstore-objectpool.
Om deze prestatiebeweringen te testen, heb ik een aantal vrij eenvoudige tests uitgevoerd op de Microsoft ContosoRetailDW-database op mijn Intel Core i7-6700K-werkstation. Ik heb twee benoemde exemplaren van SQL Server 2016 SP1 geïnstalleerd, één met Standard Edition en de andere met Developer Edition (wat gelijk is aan Enterprise Edition).
Alle configuraties en eigenschappen op instance- en databaseniveau zijn identiek tussen de twee instances, en de databasebestandslocaties van de gebruiker en tempdb bevinden zich in afzonderlijke mappen op hetzelfde, afzonderlijke flash-opslagapparaat voor elke instance. Het compatibiliteitsniveau van de database is in beide gevallen gewijzigd in 130 en de onderliggende Windows-configuratie en hardware zijn voor beide instanties hetzelfde. Het enige verschil hier is de editie van elke instantie.
De eerste test is een eenvoudige query (aangepast van Niko Neugebauer) waarmee SQL Server 2016 geaggregeerde pushdown kan gebruiken op de FactOnlineSales-tabel. De resultaten worden getoond in Tabel 1.
Edition | Verstreken tijd (ms) |
---|---|
Standaardeditie | 30 |
Ontwikkelaarseditie | 1 |
Tijdsverschil | 29 |
% verbetering | 96,7% |
Tabel 1:Totale pushdown-vergelijking
De volgende test is de timing van hoe lang het duurt om een geclusterde columnstore-index te bouwen op de FactOnlineSales-tabel met 12,6 miljoen rijen. De resultaten worden weergegeven in Tabel 2.
Edition | Verstreken tijd (ms) |
---|---|
Standaardeditie | 42.197 |
Ontwikkelaarseditie | 14.384 |
Tijdsverschil | 27.813 |
% verbetering | 65,9% |
Tabel 2:Vergelijking van geclusterde Columnstore-indexen
De volgende test is de timing van hoe lang het duurt om een geclusterde columnstore-index op dezelfde FactOnlineSales-tabel opnieuw op te bouwen. De resultaten worden getoond in Tabel 3.
Edition | Verstreken tijd (ms) |
---|---|
Standaardeditie | 33.105 |
Ontwikkelaarseditie | 11.460 |
Tijdsverschil | 21.645 |
% verbetering | 65,4% |
Tabel 3:Geclusterde Columnstore Index-vergelijking opnieuw opbouwen
De volgende test is een andere eenvoudige query waarmee SQL Server 2016 lokale aggregatie op de FactOnlineSales-tabel kan gebruiken. De resultaten worden getoond in Tabel 4.
Edition | Verstreken tijd (ms) |
---|---|
Standaardeditie | 122 |
Ontwikkelaarseditie | 83 |
Tijdsverschil | 39 |
% verbetering | 32,0% |
Tabel 4:Vergelijking van lokale aggregatie
De volgende test is een andere eenvoudige query waarmee SQL Server 2016 het pushdown-tekenreekspredikaat kan gebruiken in de FactOnlineSales- en DimPromotion-tabellen. De resultaten worden getoond in Tabel 5.
Edition | Verstreken tijd (ms) |
---|---|
Standaardeditie | 2.683 |
Ontwikkelaarseditie | 1.221 |
Tijdsverschil | 1.466 |
% verbetering | 54,6% |
Tabel 5:Stringpredikaat pushdown-vergelijking
Dit zijn slechts enkele eenvoudige voorbeelden van de ingebouwde prestatievoordelen voor Columnstore-indexen in SQL Server 2016 Enterprise Edition in vergelijking met SQL Server 2016 Standard Edition op dezelfde hardware. Als je echt in Columnstore-indexen wilt duiken (wat voor sommige workloads een zeer effectieve functie kan zijn), moet je een bladwijzer maken voor de lange reeks berichten van Niko Neugebauer op columnstore.net en deze lezen.
DBCC CHECKDB-prestaties
Een andere verbetering van de beheersbaarheid die aanwezig is op SQL Server 2016 Enterprise Edition is de DBCC CHECKDB-prestaties. Op Standard Edition gebruikt DBCC CHECKDB slechts één processorkern, terwijl het alle beschikbare kernen op Enterprise Edition kan gebruiken. Dit gedrag is ongewijzigd ten opzichte van eerdere versies van SQL Server. Met SQL Server 2016 kunt u het aantal cores dat DBCC CHECKDB kan gebruiken beperken met een nieuwe WITH (MAXDOP =x) optie.
Het uitvoeren van DBCC CHECKDB met de WITH PHYSICAL_ONLY optie op een wat grotere database (ongeveer 38 GB) die ik heb, leverde de resultaten op die worden getoond in Tabel 6.
Edition | Verstreken tijd (ms) |
---|---|
Standaardeditie | 58,492 |
Ontwikkelaarseditie | 24.897 |
Tijdsverschil | 33.595 |
% verbetering | 57,4% |
Tabel 6:DBCC CHECKDB MET PHYSICAL_ONLY vergelijking
Het uitvoeren van een standaard DBCC CHECKDB op dezelfde database leverde de resultaten op die worden weergegeven in Tabel 7.
Edition | Verstreken tijd (ms) |
---|---|
Standaardeditie | 435.039 |
Ontwikkelaarseditie | 119.767 |
Tijdsverschil | 315.272 |
% verbetering | 72,5% |
Tabel 7:DBCC CHECKDB-vergelijking
Een zeer belangrijke factor in de prestaties van DBCC CHECKDB zijn de sequentiële leesprestaties van alle LUN's waar uw databasegegevensbestand(en) zich bevinden. U kunt dit eenvoudig controleren door een BACKUP DATABASE-opdracht uit te voeren naar een NUL-apparaat (zorg ervoor dat u de opties COPY_ONLY en NO_COMPRESSION gebruikt). Dit toont u uw effectieve sequentiële leesprestaties, zoals in dit voorbeeld vanaf mijn werkstation wordt getoond:
BACK-UPDATABASE heeft met succes 5048514 pagina's verwerkt in 16,115 seconden (2447,502 MB/sec).Houd er rekening mee dat al deze tests zijn uitgevoerd op een enkele quad-core desktopprocessor. Een multi-socket server met veel meer totale processorcores zal in veel van deze tests nog meer prestatieverbetering laten zien.
Het punt van dit alles is om een paar tastbare voorbeelden te laten zien van de prestatieverbeteringen die u kunt zien, simpelweg door te upgraden van SQL Server 2016 Standard Edition SP1 naar SQL Server 2016 Enterprise Edition SP1, op dezelfde hardware, zonder wijzigingen aan de database of toepassing aan te brengen. . Deze lijst is zeker niet uitputtend, want er zijn ook veel andere voordelen.