Den 16. november 2016 annoncerede Microsoft nogle meget væsentlige ændringer til SQL Server 2016 Standard Edition, som blev implementeret i SQL Server 2016 Service Pack 1 (Build 13.0.4001.0). Mange meget nyttige programmerbarhedsrelaterede funktioner, som tidligere kun var tilgængelige i Enterprise Edition, vil nu være tilgængelige i Standard Edition (og også i Web Edition og endda Express Edition).
Når du har en databaseapplikation, der bruger SQL Server 2016 Standard Edition Service Pack 1 (eller endda en lavere udgave), kan du bare udføre en udgaveopgradering til Enterprise Edition for at få endnu mere skalerbarhed og ydeevne ved at drage fordel af de højere licensgrænser for sockets , kerner og hukommelse i Enterprise Edition, som beskrevet her.
Du vil også få de mange andre iboende ydeevnefordele, der er til stede i Enterprise Edition, sammen med flere administrationsforbedringer, der gør dit liv så meget nemmere som DBA.
Søjlelagerindekser
Hvis du bruger Columnstore-indekser, får du automatisk følgende ydeevnefordele, når du bruger Enterprise Edition:
- Samlet pushdown: Denne ydeevnefunktion giver ofte en 2X-4X forespørgselsydeevneforøgelse ved at skubbe kvalificerende aggregater til SCAN-noden, hvilket reducerer antallet af rækker, der kommer ud af den iterator.
- Indeks Build/Rebuild: Enterprise Edition kan bygge/genopbygge columnstore-indekser med flere processorkerner, mens Standard Edition kun bruger én processorkerne. Dette har en ret betydelig effekt på forløbne tider for disse operationer, afhængigt af din hardware.
- Lokale aggregater: Enterprise Edition kan bruge lokale aggregeringer til at filtrere antallet af rækker, der passerer ud af en SCAN-node, hvilket reducerer mængden af arbejde, der skal udføres af efterfølgende forespørgselsnoder. Du kan bekræfte dette ved at kigge efter "ActualLocallyAggregatedRows"-attributten i XML'en for udførelsesplanen for forespørgslen.
- Single Instruction Multiple Data (SIMD)-optimeringer: Denne funktion bruger et sæt hardwareinstruktioner, som er i stand til at behandle en række data i en enkelt instruktion, hvilket dramatisk fremskynder aggregerede operationer. Disse hardwareinstruktioner findes på alle moderne processorer (der har AVX-understøttelse), men de bruges kun af Enterprise Edition.
- Pushdown for strengprædikat: Denne ydeevnefunktion kan forbedre ydeevnen af forespørgsler, der bruger prædikat(er) på strengkolonner ved at skubbe disse prædikater til SCAN-noden. Dette kan i høj grad reducere mængden af arbejde, der skal udføres af efterfølgende noder.
- Grad af parallelisme: Batch-tilstandsforespørgsler er begrænset til MAXDOP =2 på Standard Edition. Enterprise Edition kan bruge alle de kerner, der er til stede i forekomsten. Dette kan være meget vigtigt ved større forespørgsler på typisk, moderne serverhardware.
- Hukommelsesgrænser: Columnstore-objektpuljen er begrænset til 32 GB pr. instans på Standard Edition. Enterprise Edition har ingen hukommelsesbegrænsning for Columnstore-objektpuljen.
For at teste disse præstationspåstande kørte jeg nogle ret simple tests på Microsoft ContosoRetailDW-databasen på min Intel Core i7-6700K-arbejdsstation. Jeg har to navngivne forekomster af SQL Server 2016 SP1 installeret, den ene bruger Standard Edition, og den anden bruger Developer Edition (som svarer til Enterprise Edition).
Alle konfigurationer og egenskaber på instansniveau og databaseniveau er identiske mellem de to instanser, og bruger- og tempdb-databasefilplaceringerne er i separate mapper på den samme separate flash-lagerenhed for hver instans. Databasekompatibilitetsniveauet blev ændret til 130 i begge tilfælde, og den underliggende Windows-konfiguration og hardware er den samme for begge tilfælde. Den eneste forskel her er udgaven af hver forekomst.
Den første test er en simpel forespørgsel (tilpasset fra Niko Neugebauer), der tillader SQL Server 2016 at bruge samlet pushdown på FactOnlineSales-tabellen. Resultaterne er vist i tabel 1.
Udgave | Forløbet tid (ms) |
---|---|
Standardudgave | 30 |
Udviklerudgave | 1 |
Tidsforskel | 29 |
% forbedring | 96,7 % |
Tabel 1:Samlet Pushdown-sammenligning
Den næste test er timing af, hvor lang tid det tager at opbygge et clustered columnstore-indeks på FactOnlineSales-tabellen med 12,6 millioner rækker. Resultaterne er vist i tabel 2.
Udgave | Forløbet tid (ms) |
---|---|
Standardudgave | 42.197 |
Udviklerudgave | 14.384 |
Tidsforskel | 27.813 |
% forbedring | 65,9 % |
Tabel 2:Opbygning af klyngebaserede kolonnelagerindekssammenligning
Den næste test er timing, hvor lang tid det tager at genopbygge et clustered columnstore-indeks på den samme FactOnlineSales-tabel. Resultaterne er vist i tabel 3.
Udgave | Forløbet tid (ms) |
---|---|
Standardudgave | 33.105 |
Udviklerudgave | 11.460 |
Tidsforskel | 21.645 |
% forbedring | 65,4 % |
Tabel 3:Genopbygning af Clustered Columnstore Index-sammenligning
Den næste test er en anden simpel forespørgsel, der tillader SQL Server 2016 at bruge lokal aggregering på FactOnlineSales-tabellen. Resultaterne er vist i tabel 4.
Udgave | Forløbet tid (ms) |
---|---|
Standardudgave | 122 |
Udviklerudgave | 83 |
Tidsforskel | 39 |
% forbedring | 32,0 % |
Tabel 4:Sammenligning af lokal aggregation
Den næste test er en anden simpel forespørgsel, der tillader SQL Server 2016 at bruge string-prædikat-pushdown på FactOnlineSales- og DimPromotion-tabellerne. Resultaterne er vist i tabel 5.
Udgave | Forløbet tid (ms) |
---|---|
Standardudgave | 2.683 |
Udviklerudgave | 1.221 |
Tidsforskel | 1.466 |
% forbedring | 54,6 % |
Tabel 5:Strengprædikat Pushdown-sammenligning
Dette er blot nogle simple eksempler på de indbyggede ydelsesfordele for Columnstore-indekser i SQL Server 2016 Enterprise Edition sammenlignet med SQL Server 2016 Standard Edition på samme hardware. Hvis du virkelig vil dykke ned i Columnstore-indekser (som kan være en meget effektiv funktion for nogle arbejdsbelastninger), bør du bogmærke og læse Niko Neugebauers lange række af indlæg på columnstore.net.
DBCC CHECKDB Ydeevne
En anden forbedring af administrationens ydeevne, der er til stede på SQL Server 2016 Enterprise Edition, er DBCC CHECKDB-ydeevne. På Standard Edition bruger DBCC CHECKDB kun én processorkerne, mens den kan bruge alle tilgængelige kerner på Enterprise Edition. Denne adfærd er uændret i forhold til tidligere versioner af SQL Server. SQL Server 2016 giver dig mulighed for at begrænse antallet af kerner, som DBCC CHECKDB kan bruge med en ny WITH (MAXDOP =x) mulighed.
At køre DBCC CHECKDB med indstillingen MED PHYSICAL_ONLY på en noget større database (ca. 38 GB), som jeg har, gav resultaterne vist i tabel 6.
Udgave | Forløbet tid (ms) |
---|---|
Standardudgave | 58.492 |
Udviklerudgave | 24.897 |
Tidsforskel | 33.595 |
% forbedring | 57,4 % |
Tabel 6:DBCC CHECKDB MED PHYSICAL_ONLY Sammenligning
At køre en standard DBCC CHECKDB på den samme database gav resultaterne vist i tabel 7.
Udgave | Forløbet tid (ms) |
---|---|
Standardudgave | 435.039 |
Udviklerudgave | 119.767 |
Tidsforskel | 315.272 |
% forbedring | 72,5 % |
Tabel 7:DBCC CHECKDB-sammenligning
En meget vigtig faktor i DBCC CHECKDB-ydeevne er den sekventielle læseydeevne fra alle de LUN'er, hvor din(e) databasedatafil(er) er placeret. Du kan nemt kontrollere dette ved at køre en BACKUP DATABASE-kommando til en NUL-enhed (sørg for at bruge indstillingerne COPY_ONLY og NO_COMPRESSION). Dette vil vise dig din effektive sekventielle læseydelse, som vist i dette eksempel fra min arbejdsstation:
BACKUP DATABASE behandlede 5048514 sider på 16,115 sekunder (2447,502 MB/sek.).Husk, at al denne test blev udført på en enkelt, quad-core desktop-processor. En multi-socket server med mange flere samlede processorkerner vil vise endnu mere en forbedring af ydeevnen i mange af disse tests.
Pointen med alt dette er at vise et par håndgribelige eksempler på de præstationsforbedringer, du kan se, blot ved at opgradere fra SQL Server 2016 Standard Edition SP1 til SQL Server 2016 Enterprise Edition SP1, på den samme hardware, uden at foretage nogen database- eller applikationsændringer . Denne liste er på ingen måde udtømmende, da der også er mange andre fordele.