Corso avanzato su SQL Server: performance e progettazione

corso avanzato sql server

Con il “Corso avanzato su SQL Server: performance e progettazione” 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 a 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;
    • 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 Performance 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, 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 Data Warehouse e di tematiche generali legati alle performance. Discuteremo ad esempio lo Star schema e Snowflake schema utilizzabili per la progettazione di un Data Warehouose, tramite un loro caso pratico di implementazione. Vedremo come in questi casi sia possibile valutare l’utilizzo di indici Columnstore per rendere più efficiente 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 (ti consiglio di leggere a proposito questo articolo di Brent Ozar  https://www.brentozar.com/archive/2019/08/but-nolock-is-okay-when-the-data-isnt-changing-right/).

 

Informazioni generali

Modalità di erogazione: in diretta streaming con software di videoconferenza

Durata edizione one-to-one (lezioni ristrette a un solo partecipante): 16 ore

Costo edizione one-to-one (lezioni ristrette a un solo partecipante): 960€

Durata edizione aziendale (lezioni per partecipanti della stessa azienda): da definire in una call

Costo edizione aziendale (lezioni per partecipanti della stessa azienda): 60€/h

Data di partenza del corso: entro un mese circa dalla richiesta

Calendario: concordato con lo studente o l’azienda

Possibilità di registrare le lezioni per uso didattico:

Prerequisiti: è necessaria una buona conoscenza del linguaggio SQL

Tutti i prezzi di questa pagina sono esenti iva (iva allo 0%) in quanto erogati nell’ambito del regime fiscale forfettario.

 

Contattami

CAPTCHA immagine

Questo ci aiuta a prevenire lo spam, grazie.

Scroll to Top
Torna su