SQL Server 2019 RC1 a proposito di "Online clustered columnstore index build and rebuild" (parte 2)

Carissimi lettori,

Oggi nuovo articolo, il secondo riguardante le novità introdotte dal nuovo SQL Server 2019.

Se vi siete persi il precedente articolo in cui raccontavamo della clausola OPTIMIZE_FOR_SEQUENTIAL_KEY fate click qui:The last page insert latch contention issue e la clausola OPTIMIZE FOR SEQUENTIAL KEY di SQL Server 2019 RC1 (parte 3)

Oggi parliamo invece di un altra novità ovvero del rebuild online degli indici columnstore.

Siete pronti? Via!

 

Rebuild online degli indici columnstore


Già, ma cosa sono gli indici columnstore?

Facciamo una brevissima e semplice introduzione per spiegarne la sola logica di base.
Non ci addentreremo per questa volta in nessun dettaglio tecnico.

Gli indici columnstore sono un nuovo tipo di indice (introdotto per la verità già da un molti anni con la versione 2012 di SQL Server) la cui caratteristica principale è quella di  memorizzare i dati non per riga ma bensì per colonna:

 

Questo tipo di indice fu sviluppato per velocizzare l'estrazione dei dati nel caso gestione di grandi quantità di dati come ad esempio nelle tabelle dei datawarehouse.

Per di più un ulteriore incremento delle prestazioni degli indici columnstore viene dal fatto che è possibile adottare una tecnologia di compressione dei dati denominata VertiPaq.

Questa tecnologia comprime i dati in memoria così da ottenere un numero di letture dal disco inferiori. Allo stesso tempo il parametro detto buffer cache hit ratios aumenterà per via del fatto che solamente una pagina dati ma di tipo colonna sarà sufficiente per soddisfare la nostra Query.

Pensiamo ad esempio ad una Query come questa sotto:

       
SELECT CODE,DESCR FROM PARTS WHERE DATEINS >="01/01/2050"


Per questo esempio è più efficiente creare un indice columnstore sulla campo DATA.
L'indice soddisferà la WHERE della Query è sarà sufficiente reperire una pagina di dati compressa di piccole dimensioni.

Con un indice "classico" avremmo dovuto leggere in memoria una o più pagine di dati di dimensioni maggiori e leggere l'intera riga.

Già, finora tutto bellissimo vero?

Purtroppo ho una brutta notizia, quando vennero creati erano presenti tutta una serie di limitazioni che di fatto ne hanno limitato l'utilizzo.

Ripercorriamo in poche righe la storia dei columnstore per arrivare a capire cosa è stato introdotto con la versione SQL  Server 2019.

SQL Server 2012 introdusse gli indici columnstore, questi avevamo però due limitazioni principali:

1) Poteva essere creato solamente un indice columnstore non clustered.
2) Gli indici columnstore non clustered non potevano essere aggiornati ("rebuild"). L'unico modo era dropparli e ricrearli.

Con l'uscita di SQL Server 2014 fu aggiunta la creazione degli indici columnstore clustered.
Per di più gli indici columnstore furono resi aggiornabili ("rebuild")

E' con SQL Server 2016 che viene introdotta la comperssione dei dati per gli indici columnstore sia Clustered che non Clustered.

L'attuale SQL Server 2017 ha fatto un importante passo avanti introducendo l'opzione ONLINE per i soli indici non clustered.

In questo modo l'indice columnstore può rimanere in linea e quindi utilizzabile mentre viene ricostruito. Prima l'indice non era utilizzabile!

Ed eccoci ad oggi.
Quasi a chiudere il cerchio SQL Server 2019 rende disponibile il rebuild online anche per gli indici columnstore di tipo clustered.



Alla prossima!

Luca Biondi @ SQLServerPerformance blog!







Next post: DBCC CLONEDATABASE cos'è e a che cosa serve

Previous post: The last page insert latch contention issue e la clausola OPTIMIZE FOR SEQUENTIAL KEY di SQL Server 2019 RC1 (parte 3)

Comments

I Post più popolari

SQL Server, execution plan and the lazy spool (clearly explained)

SQL Server, datetime vs. datetime2

La clausola NOLOCK. Approfondiamo e facciamo chiarezza!