La profilazione delle query consente di capire cosa sta succedendo all'interno della scatola nera delle prestazioni di SQL Server.
Per gli utenti è facile. I DBA no.
Pensa alle semplici opzioni a disposizione degli utenti quando un'applicazione di database funziona male:
- Vai a prendere un caffè e aspetta.
- Insulta il computer.
- Reclama con gli altri utenti.
- Invia una richiesta di guasto.
Non è questa la vita di Riley rispetto alle opzioni che hai come DBA?
- Cerca le sessioni bloccate.
- Controlla i rapporti di hit della cache del buffer.
- Misura l'attesa massima di I/O.
- Esamina l'aspettativa di vita della pagina.
- Verifica se gli indici sono mancanti o devono essere ricostruiti.
- Cerca blocchi/deadlock.
- Controlla l'utilizzo della CPU.
- Esamina il registro dell'applicazione per i messaggi di memoria insufficiente.
- Assicurati che il database tempdb sia configurato correttamente.
Potrebbe trattarsi di uno qualsiasi di questi problemi software e di solito ti portano alla soluzione dell'ottimizzazione di una query o della modifica della configurazione. Oppure potrebbe essere un problema hardware e la soluzione è acquistare più memoria o potenza di elaborazione.
Poiché le applicazioni di database riguardano principalmente l'esecuzione di molte query SQL, i problemi di prestazioni hanno molti posti in cui nascondersi in SQL Server. Se sei un utente, puoi dire:"Oh, beh, il problema deve essere all'interno di quella scatola nera da qualche parte. Non è il mio lavoro."
Ma come DBA, non hai quel lusso. Devi aprire la scatola nera, arrampicarti, trovare il pasticcio e aggiustarlo.
Profilazione query 101 con monitoraggio delle prestazioni del server SQL
In generale, l'obiettivo del monitoraggio delle prestazioni del server è tenere d'occhio le prestazioni delle query SQL nel tempo e l'aumento del volume delle transazioni su SQL Server. Puoi raggiungere questo obiettivo in diversi modi.
Dai un'occhiata al piano di spiegazione
Il piano di spiegazione mostra cosa farà SQL Server nell'esecuzione della query, comprese le tabelle a cui si unirà, il tipo di join che eseguirà, il numero di righe che toccherà e gli indici che utilizzerà.
Cosa può dirti il piano di spiegazione? Per prima cosa, puoi vedere come migliorare la query stessa, ad esempio rimuovendo un NESTED LOOP JOIN che uno degli sviluppatori di database ha aggiunto su una tabella enorme. Oppure, puoi capire dal piano di spiegazione che devi creare o ricostruire un indice per una determinata tabella.
Il piano di spiegazione è un buon punto di partenza per la profilazione delle query, anche prima di eseguire effettivamente le query sospette.
Esegui la query
Per eseguire le query e vedere quali risorse influiscono in fase di esecuzione, devi prima creare tracce per contrassegnare gli eventi mentre si verificano. Con le tracce, puoi acquisire dati e osservare la comparsa di errori. Uno strumento di profilazione archivia i dati acquisiti dalle tracce e li visualizza in modo da semplificare la ricerca e la risoluzione dei problemi delle query problematiche.
La combinazione delle tracce e dello strumento di profilazione può rispondere a molte domande:
- Quali query consumano più memoria?
- Quanto tempo impiega ogni query per essere eseguita?
- Quali blocchi imposta SQL Server per ogni query?
- Quali query può eseguire SQL Server dalla cache del buffer? Con quale frequenza è necessario andare su disco?
- Quante righe esamina ciascuna query?
- Quante richieste al minuto soddisfa il database?
Otterrai la lettura più accurata eseguendo la query sui database di produzione, ma ciò può anche rallentare l'elaborazione da parte dei tuoi clienti e utenti del mondo reale. Se puoi, prova prima le istanze di sviluppo o di prova in cui non sei in competizione per la memoria o l'I/O con la tua istanza di produzione.
Parlando di clienti e utenti, il tuo obiettivo nella profilazione delle query è renderli felici. La profilazione può facilmente scoprire dozzine di problemi nel tuo database, ma il motivo per cui hai aperto la scatola nera è per risolvere i problemi più dolorosi. Dopo aver acquisito i dati da uno o due giorni di normale utilizzo, è possibile riscontrare i problemi di prestazioni del server SQL che causano più problemi agli utenti. Forse un indice mancante sta rallentando il recupero dei record o troppi indici stanno rallentando l'inserimento dei record e gli aggiornamenti del database. Forse una query usata di frequente sta raccogliendo informazioni che non interessano più a nessuno.
Usa saggiamente gli strumenti di profilazione
Gli strumenti di profilazione ti salvano dal noioso processo di impostazione manuale di ogni evento, filtro e chiamata di procedura per tutto ciò che desideri tracciare. Con così tante cose da fare all'interno della scatola nera delle prestazioni di SQL Server, puoi facilmente acquisire troppi dati per vedere la foresta per gli alberi.
I buoni strumenti ti consentono di selezionare con attenzione ciò che traccia in modo che, ad esempio, non catturi centinaia di eventi Lock:Acquired e non riempi inutilmente il tuo display con essi. Tuttavia, se hai bisogno di esaminare un evento che si verifica di frequente, usa filtri come il nome dell'applicazione o il nome della tabella.
Invece di scrivere i dati di traccia in una tabella in un database, considerare di salvarli in un proprio file separato. Ciò evita che l'overhead della traccia diventi un onere per SQL Server e potrebbe alterare i risultati. Se il tuo strumento di profilazione preferisce i dati estratti da una tabella, puoi importare i dati dal file alla tabella in un secondo momento.
Migliora il monitoraggio delle prestazioni di SQL Server con la profilazione delle query
I tuoi utenti stanno lontano dalla scatola nera delle prestazioni di SQL Server, ma non è necessario. La profilazione delle query è il modo in cui apri la scatola, scopri cosa sta succedendo all'interno e inizia la risoluzione dei problemi.
Ma non aspettare fino a quando non sei nei guai per usarlo. La profilazione delle query è più simile al controllo dell'olio che alla sostituzione del motore. Aiuta con le consuete mansioni DBA di aggiornare le query obsolete e modificare il design in modo che i tuoi database stiano al passo con i cambiamenti nel business.