Posts

Showing posts from September, 2019

SQL Server 2019 ed il Memory-Optimized TempDB Metadata

Image
Ciao a tutti! Oggi torniamo a parlare del database TEMPDB. Ne abbiamo giĆ  parlato altre volte in una serie di articoli che potete trovare qui: Confronto tra "Temp Tables" (#) e "Table Variables" (@)   Il TEMPDB e la sua configurazione.. pronti per le Ferie?   SQL Server & come spostare il database TEMPDB Cos’ĆØ il database TEMPDB? ...e quindi perchĆ© ĆØ importante. Questa volta perĆ² vi racconterĆ² delle novitĆ  introdotte piĆ¹ di recente . GiĆ  perchĆØ SQL Server con l'edizione 2019 introduce alcuni miglioramenti che sono davvero significativi in questo caso.   Memory-Optmized TempDB Metadata La feature Memory-Optmized TempDB Metadata di cui parlamiano oggi fa parte della famiglia di tecnologie dette In-Memory Database . Ma cosa significa Memory-Optmized TempDB Metadata? CercherĆ² di spiegarlo nel modo piĆ¹ semplice possibile! Dopo i numerosi articoli saprete sicuramente cos'ĆØ ed a che cosa serve il database TempDB. Sapete che ĆØ una risorsa c

SQL Server 2019 e l'hint QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n

Image
Ciao a tutti carissimi lettori, Oggi cambiamo argomento continuando nel nostro percorso che ci portato in queste ultime settimane a parlare delle tante novitĆ  introdotte dalla versione 2019 di SQL Server ormai in arrivo. Premessa importante: vedete questa novitĆ  che adesso vi racconterĆ² come l'ultima via d'uscita nel caso in cui abbiate aumentato il livello di compatibilitĆ  della vostra applicazione che si appoggia a SQL Server e vi troviate ad avere una Query che manifesta dei problemi! Parliamo infatti della introduzione di un nuovo hint da specificare alla fine della nostra Query chiamato: QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n . Microsoft stessa deve essere stata tanto convinta dell'utilitĆ  di questo hint da introdurlo anche su SQL Server 2017 previo aggiornamento al CU (cumulative upadate) 10 tramite la patch KB4342424 .   Ma vediamo di cosa si tratta.   QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n  Attraverso l'hint QUERY_OPTIMIZER_COMPATIBILITY_LEVEL

Le Table Variables // Le novitĆ  introdotte con SQL Server 2019. (Parte 2)

Image
Cari lettori, Eccoci di nuovo assieme per continuare il discorso inziato nel precedente articolo che trovate Qui In precedenza vi avevo raccontato la storia delle Table Variables ma anche delle loro limitazioni . Ora perĆ² ĆØ il momento di raccontarvi le novitĆ  che accompagnano l'uscita della versione 2019 di SQL Server. Siete pronti? Mettetevi comodi che si parte!   Table Variables deferred compilation   Diamo subito un nome alla novitĆ  introdotta da SQL Server 2019 che riguarda le Table Variables: la Table Variables deferred compilation Come spiega il nome la compilazione delle Table Variables diventa Differita. Differita nel senso che avviene non al momento in cui la tabella viene creata bensƬ viene posticipata (differita) al momento in cui la tabella viene utilizzata nella nostra Query . PiĆ¹ in dettaglio, la stima della cardinalitĆ  avviene al primo utilizzo dopodichĆØ non avverrĆ  nessuna altra ricompilazione. Di fatto ĆØ quindi un compromesso tra il ricompilare la

Le Table Variables // Tutta la loro storia, come ottenere maggiori prestazioni attraverso il trace flag 2543. (Parte 1)

Image
Carissimi lettori, Oggi volevo tornare a parlarvi delle table variables . Ne avevamo giĆ  discusso delle Table variables ad inizio mese Qui quando le avevamo confrontate con le Temp Tables. Questa volta perĆ² volevo parlarvi delle loro storia , raccontarvi della loro evoluzione nel corso del tempo e delle versioni di SQL Server. Parlaremo poi anche del trace flag 2453 che ci permetterĆ  di avere in alcuni casi prestazioni maggiori. Ma adesso partiamo!   Table variables Le tabelle di tipo Table variables furono introdotte addirittura ai tempi di SQL Server 2000. Create per gestire i dati temporanei in modo piĆ¹ veloce rispetto alle Temp Tables, fu scelto di limitare le ricompilazioni e di non dotarle di statistiche. Di fatto l'idea si rivelĆ² vincente ... a metĆ ! Se infatti memorizzate in una Table Variables solamente poche righe avrete prestazioni ottime. Se perĆ² avete necessitĆ  di memorizzarne di piĆ¹ vedrete che le prestazioni caleranno. Caleranno proprio a cau

La clausola NOLOCK. Approfondiamo e facciamo chiarezza!

Image
Ehi ragazzi! La domanda ĆØ di quelle importanti! Siete pronti per scoprire tutto ma proprio tutto sulla clausola NOLOCK?   Se la riposta ĆØ si, allora seguitemi! Oggi ne spiegheremo il funzionamento in maniera approfondita. Faremo una introduzione al concetto di tipi di LOCK Ed infine vedremo come mai una SELECT ne puĆ² bloccare un'altra. Non vi nascondo che il motivo di questo articolo ĆØ fare chiarezza. Su questo argomento si sentono spesso affermazioni “curiose” ma tra le tante questa ĆØ la prima: “ uso la SELECT con l’opzione WITH(LOCK) cosƬ non blocco le altre tabelle ”.   Ma, ĆØ proprio vero quanto affermato? Beh oggi facciamo il punto!   Buona lettura!     La clausola NOLOCK Diciamo subito per iniziare che cos’ĆØ la NOLOCK. NOLOCK ĆØ il nome di una clausola che ĆØ possibile specificare all’interno di uno statement di tipo SELECT utilizzando la seguente sintassi: SELECT * FROM TABELLA WITH (NOLOCK) Si noti che non possiamo utilizzare questa cl

SQL Server 2019 RC1 e la "Resumable Online Index Creation"

Image
Ben ritrovati! Nello scorso articolo che trovate qui vi avevo raccontato brevemente cosa sono gli indici tipo columnstore parlandovi anche della loro evoluzione con il succedersi delle versioni di SQL Server. Avevamo poi discusso delle novitĆ  introdotte da SQL Server 2019 relative a questo tipo di indici. Oggi continuiamo a parlare di indici parlando di un'altra novitĆ  introdotta anch'essa a partire dalla versione di SQL Server in uscita. Parliamo di Resumable Online Index Creation . Resumable Online Index Creation Per introdurre l'argomento diciamo che SQL Server 2017 aveva introdotto la possibilitĆ  di mettere in pausa (pause) e di riprendere (resume) il rebuild online di un indice. L'utilitĆ  di questa feature ha senso quando si parla di database di dimensioni considerevoli come ad esempio nei datawarehouse dove questa ĆØ un operazione che puĆ² durare ore. SQL Server 2019 introduce la stessa funzionalitĆ  di pause/resume anche durante la creazione dell'ind

DBCC CLONEDATABASE cos'ĆØ e a che cosa serve

Image
Ciao a tutti, Oggi articoli leggero leggero. Voglio parlarvi di un comando che potrebbe tornarvi utile in molte molte occasioni. Avete presente quando avete il vostro bel database del cliente sottomano ed avreste bisogno di averne uno con la stessa identica struttura ma vuoto . Fino ad adesso cosa avreste fatto? Beh avreste percorso l'unica strada percorribile... inziare a svuotare le tabelle una per una togliendo o disabilitando tutti i constraint. Operazione sinceramente tediosa! E allora? Bhe dovete sapere che a partire da SQL Server 2014 SP2 ĆØ stato introdotto un nuovo comando che si chiama: DBCC CLONEDATABASE (DB_ORIGINALE,DB_DESTINAZIONE) Avrete giĆ  capito dacchĆØ il nome racconta tutto. Questo comando appunto clona la struttura del database senza copiare i dati . WOW! Diciamo che ovviamente il database sorgente dovrĆ  essere leggibile ed integro. Ma proviamolo!   Il test   Digitiamo il comando T-SQL sopra: DBCC CLONEDATABASE('TEST_TEMP

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

Image
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

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

Image
Carissimi lettori, Eccoci nuovamente qui per un articolo particolamente intenso. Con oggi terminiamo questa serie di articoli legati alla problematica detta last page insert contention issue allacciandoci ad un altro arogmento che vi prometto sarĆ  ugualmente se non piĆ¹ interessante. Come saprete giĆ , ĆØ uscita da pochi giorni la versione Release Candidate 1 di SQL Server 2019 . E' stata anticipata da ben 8 Common Technology Preview (CTP) che ci hanno mostrato un assaggio delle nuove feature che la nuova versione ci porterĆ . Iniziamo quindi ad analizzare le novitĆ  che ci porterĆ  SQL Server 2019. Una di esse ĆØ proprio dedicata alla riduzione del fenomeno che stiamo analizzando in questa ultima serie di articoli.   Questa nuova feature ĆØ detta OPTIMIZE FOR SEQUENTIAL KEY ed ĆØ in realtĆ  una clausola che ĆØ possibile specificare durante la creazione di un indice .   Proviamola!   OPTIMIZE FOR SEQUENTIAL KEY Feature  Impostiamo per prima