Il 16 novembre 2016, Microsoft ha annunciato alcune modifiche molto significative per SQL Server 2016 Standard Edition, che sono state implementate in SQL Server 2016 Service Pack 1 (Build 13.0.4001.0). Molte utili funzioni relative alla programmabilità che in precedenza erano disponibili solo in Enterprise Edition saranno ora disponibili in Standard Edition (e anche in Web Edition e persino Express Edition).
Una volta che hai un'applicazione di database che utilizza SQL Server 2016 Standard Edition Service Pack 1 (o anche un'edizione inferiore), puoi semplicemente eseguire un aggiornamento dell'edizione a Enterprise Edition per ottenere ancora più scalabilità e prestazioni, sfruttando i limiti di licenza più elevati per i socket , core e memoria in Enterprise Edition, come dettagliato qui.
Avrai anche molti altri vantaggi intrinseci in termini di prestazioni presenti in Enterprise Edition, insieme a molteplici miglioramenti di gestibilità che ti semplificano la vita come DBA.
Indici del Columnstore
Se utilizzi gli indici Columnstore, ottieni automaticamente i seguenti vantaggi in termini di prestazioni quando utilizzi Enterprise Edition:
- Pushdown aggregato: Questa caratteristica delle prestazioni spesso offre un aumento delle prestazioni delle query 2X-4X spingendo gli aggregati di qualificazione al nodo SCAN, riducendo il numero di righe in uscita da quell'iteratore.
- Crea/ricostruisci indice: L'edizione Enterprise può creare/ricostruire indici columnstore con più core del processore, mentre la Standard Edition utilizza solo un core del processore. Ciò ha un effetto piuttosto significativo sui tempi trascorsi per queste operazioni, a seconda dell'hardware.
- Aggregati locali: Enterprise Edition può utilizzare le aggregazioni locali per filtrare il numero di righe in uscita da un nodo SCAN, riducendo la quantità di lavoro che deve essere eseguita dai nodi di query successivi. Puoi confermarlo cercando l'attributo "ActualLocallyAggregatedRows" nell'XML del piano di esecuzione della query.
- Ottimizzazioni SIMD (Single Instruction Multiple Data): Questa funzione utilizza una serie di istruzioni hardware in grado di elaborare una serie di dati in una singola istruzione, accelerando notevolmente le operazioni aggregate. Queste istruzioni hardware sono presenti su tutti i moderni processori (che hanno il supporto AVX), ma sono utilizzate solo da Enterprise Edition.
- Pushdown predicato di stringa: Questa caratteristica delle prestazioni può migliorare le prestazioni delle query utilizzando i predicati sulle colonne di stringhe eseguendo il push di questi predicati nel nodo SCAN. Ciò può ridurre notevolmente la quantità di lavoro che deve essere eseguita dai nodi successivi.
- Grado di parallelismo: Le query in modalità batch sono limitate a MAXDOP =2 su Standard Edition. Enterprise Edition può utilizzare tutti i core presenti per l'istanza. Questo può essere molto significativo su query più grandi su hardware server moderno e tipico.
- Limiti di memoria: Il pool di oggetti Columnstore è limitato a 32 GB per istanza in Standard Edition. Enterprise Edition non ha alcuna limitazione di memoria per il pool di oggetti Columnstore.
Per testare queste affermazioni sulle prestazioni, ho eseguito alcuni test abbastanza semplici sul database Microsoft ContosoRetailDW sulla mia workstation Intel Core i7-6700K. Ho due istanze denominate di SQL Server 2016 SP1 installate, una che utilizza Standard Edition e l'altra che utilizza Developer Edition (che equivale a Enterprise Edition).
Tutte le configurazioni e le proprietà a livello di istanza e di database sono identiche tra le due istanze e le posizioni dei file di database tempdb e utente si trovano in directory separate sullo stesso dispositivo di archiviazione flash separato per ciascuna istanza. Il livello di compatibilità del database è stato modificato in 130 in entrambi i casi e la configurazione e l'hardware di Windows sottostanti sono gli stessi per entrambe le istanze. L'unica differenza qui è l'edizione di ogni istanza.
Il primo test è una query semplice (adattata da Niko Neugebauer) che consente a SQL Server 2016 di utilizzare il pushdown aggregato nella tabella FactOnlineSales. I risultati sono mostrati nella Tabella 1.
Edizione | Tempo trascorso (ms) |
---|---|
Edizione standard | 30 |
Edizione per sviluppatori | 1 |
Differenza di tempo | 29 |
% di miglioramento | 96,7% |
Tabella 1:confronto pushdown aggregato
Il test successivo determina il tempo necessario per creare un indice columnstore cluster nella tabella FactOnlineSales da 12,6 milioni di righe. I risultati sono mostrati nella Tabella 2.
Edizione | Tempo trascorso (ms) |
---|---|
Edizione standard | 42.197 |
Edizione per sviluppatori | 14.384 |
Differenza di tempo | 27.813 |
% di miglioramento | 65,9% |
Tabella 2:creazione di un confronto tra gli indici di Columnstore in cluster
Il test successivo determina il tempo necessario per ricostruire un indice columnstore cluster nella stessa tabella FactOnlineSales. I risultati sono mostrati nella Tabella 3.
Edizione | Tempo trascorso (ms) |
---|---|
Edizione standard | 33.105 |
Edizione per sviluppatori | 11.460 |
Differenza di tempo | 21.645 |
% di miglioramento | 65,4% |
Tabella 3:ricostruzione del confronto degli indici di Columnstore in cluster
Il test successivo è un'altra query semplice che consente a SQL Server 2016 di usare l'aggregazione locale nella tabella FactOnlineSales. I risultati sono mostrati nella Tabella 4.
Edizione | Tempo trascorso (ms) |
---|---|
Edizione standard | 122 |
Edizione per sviluppatori | 83 |
Differenza di tempo | 39 |
% di miglioramento | 32,0% |
Tabella 4:confronto dell'aggregazione locale
Il test successivo è un'altra query semplice che consente a SQL Server 2016 di usare il pushdown del predicato di stringa nelle tabelle FactOnlineSales e DimPromotion. I risultati sono mostrati nella Tabella 5.
Edizione | Tempo trascorso (ms) |
---|---|
Edizione standard | 2.683 |
Edizione per sviluppatori | 1.221 |
Differenza di tempo | 1.466 |
% di miglioramento | 54,6% |
Tabella 5:confronto pushdown predicato stringa
Questi sono solo alcuni semplici esempi dei vantaggi in termini di prestazioni incorporati per gli indici Columnstore in SQL Server 2016 Enterprise Edition rispetto a SQL Server 2016 Standard Edition sullo stesso hardware. Se vuoi davvero immergerti negli indici Columnstore (che possono essere una funzionalità molto efficace per alcuni carichi di lavoro), dovresti aggiungere un segnalibro e leggere la lunga serie di post di Niko Neugebauer su columnstore.net.
Rendimento DBCC CHECKDB
Un altro miglioramento delle prestazioni di gestibilità presente in SQL Server 2016 Enterprise Edition è rappresentato dalle prestazioni di DBCC CHECKDB. Nell'edizione standard, DBCC CHECKDB utilizza solo un core del processore, mentre può utilizzare tutti i core disponibili nell'edizione Enterprise. Questo comportamento è invariato rispetto alle versioni precedenti di SQL Server. SQL Server 2016 consente di limitare il numero di core che DBCC CHECKDB può utilizzare con una nuova opzione WITH (MAXDOP =x).
L'esecuzione di DBCC CHECKDB con l'opzione WITH PHYSICAL_ONLY su un database un po' più grande (circa 38 GB) che ho, ha prodotto i risultati mostrati nella Tabella 6.
Edizione | Tempo trascorso (ms) |
---|---|
Edizione standard | 58.492 |
Edizione per sviluppatori | 24.897 |
Differenza di tempo | 33.595 |
% di miglioramento | 57,4% |
Tabella 6:confronto DBCC CHECKDB CON PHYSICAL_ONLY
L'esecuzione di un DBCC CHECKDB standard sullo stesso database ha prodotto i risultati mostrati nella Tabella 7.
Edizione | Tempo trascorso (ms) |
---|---|
Edizione standard | 435.039 |
Edizione per sviluppatori | 119.767 |
Differenza di tempo | 315.272 |
% di miglioramento | 72,5% |
Tabella 7:confronto DBCC CHECKDB
Un fattore molto importante per le prestazioni di DBCC CHECKDB sono le prestazioni di lettura sequenziale da tutte le LUN in cui si trovano i file di dati del database. Puoi verificarlo facilmente eseguendo un comando BACKUP DATABASE su un dispositivo NUL (assicurandoti di utilizzare le opzioni COPY_ONLY e NO_COMPRESSION). Questo ti mostrerà le tue effettive prestazioni di lettura sequenziale, come mostrato in questo esempio dalla mia workstation:
BACKUP DATABASE ha elaborato correttamente 5048514 pagine in 16.115 secondi (2447.502 MB/sec).Tieni presente che tutti questi test sono stati eseguiti su un singolo processore desktop quad-core. Un server multi-socket con molti più core di processore totali mostrerà un miglioramento delle prestazioni ancora maggiore in molti di questi test.
Il punto di tutto questo è mostrare alcuni esempi tangibili dei miglioramenti delle prestazioni che puoi vedere, semplicemente aggiornando da SQL Server 2016 Standard Edition SP1 a SQL Server 2016 Enterprise Edition SP1, sullo stesso hardware, senza apportare modifiche al database o all'applicazione . Questo elenco non è affatto esaustivo, poiché ci sono anche molti altri vantaggi.