
In questa prima lezione lanceremo lo script disponibile nella sezione "Risorse" per creare il database Gestionale.
Se hai già un'istallazione di SQL Server idonea per seguire il corso ed esercitarti, puoi saltare questa lezione e procedere direttamente con la prossima sezione "Indici e piani di esecuzione di SQL Server".
Altrimenti puoi seguire la lezione in cui installeremo l'edizione Express del database SQL Server e SQL Server Management Studio su un PC personale con sistema operativo Windows.
Vi ricordo di utilizzare sempre un PC personale per l'installazione di questo e qualsiasi altro software.
È sempre sconsigliato usare un PC aziendale senza la preventiva autorizzazione del reparto IT.
In questa lezione analizziamo gli impatti della creazione di una chiave primaria e del conseguente indice clustered sul piano di esecuzione di una query.
In seguito creiamo un indice non clustered e studiamo l'incidenza della clausola SELECT sulle possibilità di utilizzo dell'indice.
In questa importante lezione analizziamo gli ulteriori fattori che influenzano la scelta di utilizzare o meno un indice non-clustered all'interno di un piano d'esecuzione.
Studieremo inoltre il comportamento in caso di codice parametrico, stored procedure e viste parametriche.
Studiamo tre operatori che spesso hanno un impatto cruciale sui tempi di esecuzione di una query:
sort;
hash aggregate;
stream aggregate.
In questa lezione parliamo degli algoritmi loop join, merge join e hash join analizzando:
- gli impatti sulle performance;
- il legame tra gli indici presenti sulla tabella e la tipologia di join scelta.
Vediamo come utilizzare la clausola INCLUDE per rendere un indice "covered" relativamente ad una query e analizziamo gli impatti sul piano di esecuzione di indici definiti su più colonne.
In questa lezione analizziamo l'importanza dell'ordine delle colonne nella definizione di una chiave primaria (e quindi di un indice clustered) sulle performance del database.
Vediamo un caso d'uso dei filtered index creati utilizzando la clausola WHERE nella definizione di un indice non clustered.
In quest'ultima lezione della sezione eseguiamo una serie di esperimenti per studiare come la creazione degli indici impatti il piano esecuzioni di quattro query simili.
Tra le risorse trovi lo script per creare il database CorsoSQL.
In questa lezione vediamo come scrivere del codice parametrico. Impareremo in particolare a
dichiarare e usare variabili;
creare viste parametriche (inline table value function);
interrogare viste parametriche;
utilizzare i costrutti cross apply e outer apply per passare una serie di valori ad una vista parametrica.
Approfondiamo i costrutti Cross Apply e Outer Apply analizzandone altri casi d'uso oltre a quelli già visti in congiunzione con le viste parametriche.
In questa lezione ripassiamo l'utilizzo delle Window Function su Sql Server. Puoi creare il database utilizzato negli esempi tramite lo script "CreaDatabaseCorsoSQL" che trovi nelle risorse.
Se utilizzi già frequentemente le window function, puoi passare alla lezione successiva in cui ne studiamo l'impatto sulle performance.
Studiamo altri possibili casi di utilizzo delle window function.
Analizziamo l'operazione di pivot dei dati, studiando due modalità di implementazione:
lo specifico costrutto PIVOT;
un utilizzo furbo della funzione CASE WHEN.
Studieremo inoltre come effettuare il passaggio inverso di unpivot.
In questa lezione vedremo come ampliare le funzionalità del costrutto GROUP BY effettuando aggregazioni multi-livello con una sola scansione dei dati.
Uno degli indiscutibili punti di forza dei database relazionali è quello di poter aggiornare il database utilizzando le transazioni: si tratta di insiemi di operazioni (ad esempio una INSERT e una DELETE) che devono essere eseguite come un unico blocco, escludendo la possibilità che solo alcune di esse vadano a buon fine.
Introduciamo infine i blocchi TRY e CATCH per la gestione degli errori.
In questa lezione vediamo come utilizzare i blocchi TRY-CATCH per gestire gli errori su SQL Server.
Approfondiamo alcune tipologie di errori non vengono gestite dal blocco TRY-CATCH, introducento l'opzione SET XACT_ABORT ON.
Costruiamo infine un template per le stored-procedure.
In questa lezione analizziamo come l'ordine con cui scriviamo le condizioni in una clausola WHERE non impatti il piano d'esecuzione di una query.
Assodati i concetti della lezione precedente, vediamo come applicarli per scrivere query che contengono la funzione CONVERT in modo deterministico.
Riflettiamo inoltre sulle potenziali problematiche di queste query a livello di performance, come segnalato dal Warning nel piano d'esecuzione.
Analizziamo un esempio pratico in cui la struttura della query ci permette di sostituire l'UNION con UNION ALL, con un conseguente impatto positivo sulle performance.
Molto spesso necessitiamo di raggruppare i dati su vari livelli di aggregazione. Vediamo come evitare la scansione multipla delle tabelle tramite la clausola GROUPING SETS
Confrontiamo le performance di query che utilizzano la LEFT JOIN e la NOT EXISTS per eseguire le medesime tipologie di analisi.
Impariamo a migliorare le performance di una query scrivendi codice SARGABLE ed evitando l'utilizzo di funzioni.
Analizziamo i casi in cui è possibile utilizzare senza rischi le tabelle temporanee, confrontandone gli impatti sul piano d'esecuzione e le performance con le Suquery o le CTE.
Vediamo un esempio in cui l'utilizzo delle window function permette di scrivere del codice SQL più efficiente evitando una doppia scansione dei dati.
Vediamo un esempio in cui l'utilizzo delle window function porta un peggioramento delle performance della query.
Dalla sezione Risorse della lezione è possibile scaricare gli script di tutte le esercitazioni del modulo.
In questa lezione vediamo una possibile tecnica di tuning di query che prevede di eseguire una pre-aggrazione per sfruttare al meglio l'ordinamento di un indice
In questa lezione ragioniamo sui possibili impatti di utilizzare una vista che effettua più calcoli di quelli necessari.
In alcuni casi l'utilizzo di subquery può portare ad un utilizzo meno preciso delle statistiche. Vediamo come modificare la query tramite tabelle temporanee e sql dinamico, introducendo inoltre le problematiche associate all'SQL Injection
Vediamo come migliorare le performance di una query che utilizzava l'operatore IN in un modo particolare
Vediamo un'esempio particolare in cui modificare una Left Join in Inner Join lascia il risultato sostanzialmente invariato ma permette di migliorare notevolmente le performance
Approfondiamo in questa lezione i possibili ordinamenti delle colonne all'interno di un indice.
Studiamo un caso in cui l'aggiunta di una Join può essere compensato da un piano d'esecuzione più efficiente,
Introduciamo l'innovativo approccio all'analisi dei dati tipico del Machine Learning. presentando un problema di classificazione sul noto Dataset Iris. Analizziamo le operazioni di pre-processing dei dati da implementare e creiamo un database su SQL Server per eseguire i calcoli.
Citazione dataset Iris
Fisher,R. A.. (1988). Iris. UCI Machine Learning Repository. https://doi.org/10.24432/C56C76.
Implementiamo una procedura T-SQL per caricare i dati del file Iris ed effettuare le operazioni di pre-processing
Descriviamo e implementiamo in T-SQL l'algoritmo di classificazione binaria del Perceptron.
In questa lezione vediamo un metodo per individuare le query più problematiche eseguite sul nostro Database.
Ci concentreremo a tal proposito sulla vista di sistema SYS.dm_exec_query_stats.
Ricorda: gli script di questa e di tutte le altre lezioni hanno solo fine didattico. Occorre testarli approfonditamente prima di farne un utilizzo effettivo.
Analizziamo quattro tipologie di warning sollevati dai piani d'esecuzione di SQL Server:
- spill in TempDB
- missing statistics
- no join predicate
- type conversion may affect "CardinalityEstimate"
Effettueremo inoltre un approfondimento sul funzionamento delle statistiche
Connettiamoci a SQL Server tramite la libreria SQLAlchemy utilizzando l'autenticazione di Windows.
Approfondiamo i temi dell'autenticazione tramite nome utente, password e file di configurazione.
Complimenti! Hai completato il Corso SQL Server: Performance Tuning e analisi Piani di Esecuzione.
In questo video ti mostro La Scuola dei Dati, la mia piattaforma didattica in cui trovi tutti i temi di cui hai bisogno spiegati in un unico percorso completo, organico e strutturato, pensato per accompagnarti passo dopo passo. Costruisci oggi la tua carriera in Data Analysis e Intelligenza Artificiale, a soli 11€ al mese.
Visita il sito https://www.lascuoladeidati.it/
Applica il codice 68D7C in fase di registrazione per ottenere un 30% di sconto sul primo mese.
Perché oggi questa query è più lenta?
Perché aggiungendo una colonna nella SELECT le performance peggiorano così tanto?
Perché l'indice che ho creato non viene utilizzato?
Come faccio a riscrivere la query per migliorarne le performance?
È più veloce la left join o la not exists?
Conviene utilizzare le subquery o le tabelle temporanee?
Se nel tuo lavoro da sviluppatore SQL, DBA o Data Analyst ti poni quotidianamente queste domande, sei nel posto giusto per effettuare un importante upgrade delle tue competenze. Imparerai a ragionare come SQL Server e comprendere quali strategie attuare per scrivere del codice T-SQL più performante.
Nella prima sezione ci concentreremo sull'analisi del Piano di esecuzione di una query (Query Execution Plan): lo strumento fondamentale per comprendere come SQL Server sta processando il codice SQL che abbiamo scritto. Analizzeremo come la creazione degli indici può (e non può) impattare sul piano di esecuzione. Studieremo tutti i principali operatori tra cui:
- clustered/non clustered index scan e seek;
- loop, hash e merge join;
- stream aggregate e hash aggregate;
- sort;
- key lookup.
Nella seconda sezione metteremo in pratica quanto studiato tramite una serie di esperimenti pratici di ottimizzazione del codice T-SQL che ti forniranno numerosi strumenti da utilizzare nel lavoro quotidiano.
Nell'ultima sezione vedremo degli approfondimenti sul T-SQL avanzato: parliamo di gestione degli errori e transazioni, blocchi try-catch, opzione xact_abort, cross apply, outer apply, grouping sets, rollup, cube, pivot e unpivot. Arriveremo infine a implementare in T-SQL un intero modello di Machine Learning, effettuando il pre-processing dei dati e programmando da zero il noto algoritmo del Perceptron, precursore delle attuali reti neurali.
Ho inserito infine un quiz finale con il quale potrai ripassare e verificare le competenze acquisite.
Le videolezioni sono corredate anche dai file contenenti gli script e gli esercizi visti durante le spiegazioni. Nel complesso, si tratta a tutti gli effetti di un manuale aggiuntivo di Performance Tuning su SQL Server. Inoltre sarò sempre disponibile a rispondere a dubbi e domande sul materiale del corso, che potrai porre tramite i messaggi di Udemy o l'apposita sezione di Domande & Risposte.
Per la natura degli argomenti trattati e il lavoro necessario per la sua produzione, spero che capirete la scelta di non applicare al prezzo di questo corso l'usuale scontistica.