corso database avanzato

Corso avanzato su SQL Server: progettazione e performance

Con il “Corso avanzato su SQL Server: progettazione e performance” ho il primario obiettivo di insegnarti come il motore del database Microsoft Sql Server esegua internamente le query scritte in SQL. Acquisire questa competenza è fondamentale per affrontare seriamente e con metodo tutte le questioni legate alle performance di un database, alla progettazione delle tabelle e degli indici e alla riscrittura di query efficienti.

Vi riporto una richiesta che mi è arrivata un po’ di tempo fa via mail:

“A me serve proprio un corso avanzato, perché sql lo uso tutti i giorni ma devo capire come strutturare le tabelle e le query, perché non capisco come mai spostando una left join magari passo da 20 secondi di esecuzione a zero”

Se anche tu ti rivedi in questa situazione, devi sapere che già per rispondere ad una domanda apparentemente lineare come questa “non capisco come mai spostando una left join la durata dell’esecuzione cambia” possono entrare in gioco molteplici fattori:

    • è fondamentale partire con lo studio del piano di esecuzione della query per individuare gli operatori con costo maggiore e che quindi impattano maggiormente sulla durata totale;
    • bisogna studiare la struttura delle tabelle (sia per quel che riguarda i tipi delle colonne e sia per la distribuzione dei dati);
    • occorre valutare se il codice fa parte di una stored procedure e se eventualmente essa se è soggetta al fenomeno noto come parameter sniffing (in questo mio articolo trovi un’introduzione sul tema);
    • la presenza o l’assenza di indici può impattare notevolmente sugli algoritmi usati dal motore di database per risolvere la query;
    • molto spesso il problema potrebbe derivare dalla scrittura di un codice SQL non ottimizzato, che ad esempio non utilizzi a pieno tutte le funzionalità del Transact-SQL come le window functions;
    • occorre valutare se può risultare conveniente materializzare i risultati parziali della query in una tabella temporanea del TempDb.

Durante il corso approfondiremo nel dettaglio tutti questi temi e molti altri, con l’obiettivo di aiutarti a compiere un importante salto in avanti in termini di competenze, acquisendo quelle nozioni avanzate che ti faranno emergere nel tuo team di lavoro. In questo modo sarai proiettato nel mondo della progettazione, modellizzazione e tuning di un Database, non limitandoti quindi alla sola programmazione SQL.

Il programma del corso “Funzionalità avanzate e progettazione su SQL Server”

Ho diviso il programma in tre sezioni.

Studio del piano di esecuzione di una query

La prima e fondamentale sezione del corso riguardo lo studio del piano di esecuzione delle query (Query Execution Plan). Saper analizzare il piano di esecuzione è la competenza che utilizzeremo più frequentemente in tutte le nostre attività di tuning del database. In questo mio articolo trovi un’introduzione sul tema.

esempio di piano di esecuzione di una query su Microsoft Sql Server

Partiremo analizzando gli effetti della creazione di una chiave primaria sulla struttura fisica delle tabelle, comprendendo quindi la differenza tra un Heap e un Clustered Index e come questo può impattare gli algoritmi di risoluzione di una query e di conseguenza il piano di esecuzione.

Con una serie di esempi vedremo cosa cambia con la creazione di un indice non clustered e capiremo quando la sua presenza si può riflettere in un miglioramento delle performance e quando, invece, può impattare addirittura negativamente. Scopriremo che in determinate situazioni i QEP di due query che all’apparenza sono sostanzialmente identiche possono essere sostanzialmente differenti. Nella foto in alto, ad esempio, sono riportati i due QEP relativi a queste due query:

SELECT * FROM Clienti WHERE Nome=’Nicola’
SELECT * FROM Clienti WHERE Nome=’Giovanni’

Come vedete si tratta di query con la stessa struttura, per la quale l’unica differenza è il valore della colonna cercato, per i quali il QEP (e anche il relativo costo) è molto differente.

Analizzeremo pertanto i principali operatori presenti nei piano d’esecuzione come ad esempio:

  • Clustered Index Scan;
  • Clustered Index Seek;
  • Key-Lookup;
  • Nested join;
  • Merge join;
  • Hash join;
  • Hash  aggregate;
  • Stream aggregate

Vedremo come ognuno di essi è correlato con i costrutti classici del SQL, individuando quali tra questi potrebbero essere la spia di una query poco performante che necessita di un’indice o di una riscrittura del codice.

Per una piena e profonda comprensione di questa sezione, approfondiremo infine le statistiche di Sql Server, cioè le informazioni inerenti la distribuzione dei valori nelle tabelle e negli indici che Sql Server collezione e utilizza attivamente per creare i piani di esecuzione. Vedremo come leggerle, interpretarle e come possono impattare sulle performance di una query.

esempio di statistiche sul database sql server

 

Laboratorio di performance tuning delle query

A questo punto avremo visto abbastanza teoria e sarà necessario iniziare a mettere in pratica quanto appreso. Durante le mie attività di consulenza e nelle edizioni passate di questo corso, ho collezionato una lunga serie di esempi di query interessantissime, che potremo usare per studiarne il piano di esecuzione, esercitarci e capire come migliorarne le performance.

Ci soffermeremo sull’importanza di scrivere condizione Sargable (ne parlo in questo articolo insieme ad altre tecniche semplici e veloci per migliorare sin da subito il tuo SQL), vedremo varie tecniche per riscrivere query in modo più efficiente sia utilizzando costrutti avanzati come la cross apply, ma anche semplificando il nostro codice evitando tutte quelle operazioni che non sono necessarie. Studieremo diverse modalità per affrontare il parameter sniffing delle stored procedure e analizzeremo come l’utilizzo di variabili può impattare negativamente sulle performance.

In questo video trovi un esempio delle attività che svolgeremo in questa parte.

 

Progettazione di un database e star schema

A fine corso parleremo più in generale di come progettare un Datawarehouse e di tematiche generali legati alle performance. Discuteremo ad esempio dello Star e Snowflake schema utilizzabili per la progettazione di un Datawarehouose osservando un loro caso pratico di implementazione. Vedremo come in questi casi sia possibile valutare l’utilizzo di indici Columnstore per efficientare le classiche query di reporting che richiedono l’aggregazione di milioni di righe.

Strettamente legati alle performance sono anche tutti i temi legati ai diversi livelli di isolamento. Vedremo come si generano i deadlock e perché è sconsigliato usare l’opzione NOLOCK in ambiente di produzione (per approfondire subito puoi leggere questo articolo di Brent Ozar).

 

Informazioni generale sul corso

Per corsi in modalità one-to-one, rivolti ad un unico studente, la durata necessaria per trattare adeguatamente gli argomenti descritti in questa pagina è di 16 ore. In questo caso il costo è di 720€, pari a 45€ orari.

Spesso mi viene chiesto di erogare il corso contemporaneamente a più colleghi della stessa azienda. In questo caso il costo è di 1040€, pari a 65€ orari.

Prerequisito del corso è una solida conoscenza delle basi del linguaggio SQL. Prova a dare un’occhiata anche alla scheda del corso introduttivo a sql e ai database relazionali o del corso intermedio sviluppo e programmazione sul Database Sql Server.

 

Materiale didattico

Il database d’esempio, gli script, gli esercizi con le soluzioni e tutto il materiale didattico saranno consegnati puntualmente alla fine di ogni lezione. Al termine del corso verrà rilasciato un certificato di frequenza con profitto.

Alcune recensioni dei miei studenti

Ho trovato davvero un professionista… Ho trovato davvero un professionista che si è dedicato a me ed al mio obiettivo. Nicola, oltre ad essere molto competente in materia, si è dedicato molto a capire e poi applicare il metodo giusto per trasmettere i concetti nel modo migliore (quando ero in difficoltà si fermava sempre, più tempo del dovuto, a spiegare in maniera diversa pur di farmi capire veramente).Pochissimi adattano il loro metodo di insegnamento allo studente, Nicola è uno di questi.Mi sono trovata benissimo ed ho consigliato la scuola a diversi miei amici e colleghi.Continuate così!Grazie ancora Nicola.

Jessica
22/11/20

Funzionalità avanzate su SQL Server Ottimo corso, ben strutturato con teoria e esempi pratici. Docente molto preparato sempre disponibile e chiaro nelle spiegazioni. Consigliato sia per la preparazione all'esame di certificazione sia per aumentare il proprio livello di conoscenza di SQL.

Alessio Marta
01/04/20
Torna su