Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Piano di esecuzione di SQL Server:cos'è e in che modo aiuta con i problemi di prestazioni?

Un piano di esecuzione di SQL Server è utile per analizzare i problemi di prestazioni con le query. I professionisti del database spesso ricevono ticket per problemi o reclami degli utenti che le query vengono eseguite lentamente. I risultati delle query che richiedevano due o tre minuti all'improvviso richiedono più di 30 minuti. La risoluzione dei problemi potrebbe richiedere l'analisi di aree quali risorse del server (CPU, memoria), statistiche, prestazioni del disco, blocco, deadlock e indici. In questo articolo, ci concentreremo sul ruolo del piano di esecuzione di SQL Server nella risoluzione dei problemi di prestazioni.

Cosa succede dopo aver inviato T-SQL in SQL Server?

Diamo un'occhiata a cosa succede dopo aver inviato una query utilizzando Transact-SQL o T-SQL in SQL Server. Per gli utenti, ovviamente, non fa differenza. Gli utenti si aspettano di ottenere rapidamente risultati accurati, sia che eseguano query nel database o che effettuino ricerche sul Web.

Il flusso di lavoro di alto livello di una query SQL

  1. L'utente si autentica in SQL Server in un'applicazione client e invia una query.
  2. SQL Server analizza la query e verifica eventuali errori di sintassi.
  3. L'albero di analisi viene ulteriormente elaborato in Algebrizer, che risolve tutti gli oggetti, le tabelle e le colonne nella query. Esegue anche un controllo sui tipi di dati delle colonne. In caso di problemi, restituisce un errore. Algebrizer genera un albero del processo di query e un hash di query. Se il piano di esecuzione esiste già, SQL Server utilizza quel piano memorizzato nella cache ed esegue la query.
  4. Se non esiste un piano o il piano è obsoleto, Query Optimizer esegue un'ottimizzazione completa basata sui costi con l'aiuto di statistiche, albero del processo di query e vincoli. Sulla base di tali input, prepara il piano di esecuzione di SQL Server ottimizzato per i costi.
  5. Infine, il motore di query di SQL Server esegue la query in base al piano di esecuzione e restituisce i risultati.

Panoramica di un piano di esecuzione di SQL Server

Un piano di esecuzione di SQL Server consente ai professionisti del database di risolvere i problemi relativi alle prestazioni delle query e di scrivere query efficienti. Quando una query impiega molto tempo per l'esecuzione, il piano di esecuzione di SQL Server può aiutarti a identificare il punto in cui la query richiede più risorse e tempo.

Puoi utilizzare una delle seguenti opzioni per generare un piano di esecuzione:

  1. SQL Server Management Studio
  2. Azure Data Studio
  3. Profilatore di SQL Server
  4. Eventi estesi
  5. Viste di gestione dinamica
  6. Software di monitoraggio di database di terze parti

I piani di esecuzione generati da #1 a #5 sono simili. Il software di monitoraggio del database di terze parti (n. 6) fornisce funzioni aggiuntive che utilizzano la codifica a colori per identificare gli operatori costosi.

SQL Server fornisce piani di esecuzione stimati ed effettivi, simili a quelli che si verificano quando è necessario riparare l'auto. Un meccanico ispeziona il tuo veicolo, quindi ricevi una stima del lavoro in base alle tue esigenze, alle condizioni del veicolo e al tempo e ai materiali approssimativi che il meccanico pensa che la riparazione richiederà. Naturalmente, il costo e il tempo effettivi possono variare, come accade con i piani di esecuzione di SQL Server stimati ed effettivi.

Piani di esecuzione stimati

Senza eseguire la query, è possibile ottenere un piano di esecuzione (logico) stimato di SQL Server basato sulle statistiche di SQL Server. In SQL Server Management Studio (SSMS) segui questi passaggi:

  1. Evidenzia la query (nel caso desideri il piano di esecuzione per una query specifica).
  2. Fai clic sul pulsante Visualizza piano di esecuzione stimato (scorciatoia da tastiera Ctrl + L), come mostrato di seguito.

A volte SQL Server non è in grado di produrre un piano stimato; ad esempio, se un parametro viene utilizzato senza specificarne il valore nella query o se non viene dichiarata una tabella temporanea.

Piano di esecuzione effettivo

Dopo aver inviato la query a SQL Server, è possibile ottenere un piano di esecuzione effettivo che rappresenta i passaggi eseguiti da SQL Server per eseguire la query. Come nello scenario di riparazione del veicolo, è come la fattura effettiva che ricevi.

Per ottenere il piano di esecuzione effettivo, segui i passaggi seguenti in SSMS prima di eseguire la query.

  1. Evidenzia la query.
  2. Fai clic su Mostra piano di esecuzione effettivo pulsante (scorciatoia da tastiera Ctrl + M ), come mostrato sopra.

Formati del piano di esecuzione di SQL Server

Per impostazione predefinita, le procedure SSMS spiegate sopra generano un piano di esecuzione di SQL Server in formato grafico. Ma hai la possibilità di visualizzare i piani di esecuzione in tre formati diversi:

  1. Grafica
  2. XML
  3. Testo

Diamo un'occhiata a ciascuno di questi formati.

1. Piano di esecuzione grafico

Il piano grafico mostra tutti i componenti, incluso il flusso di dati, come mostrato di seguito.

Operatori

Gli operatori vengono visualizzati come icone. Ogni operatore è designato per svolgere un compito specifico. Ad esempio, Query Optimizer in SQL Server potrebbe eseguire un'analisi della tabella, un'analisi dell'indice e una ricerca. Ecco come appare un operatore di ricerca dell'indice cluster mentre estrae i dati da un indice nella tabella [AdventureWorks2019].[HumanResources]:

Costo percentuale

Il piano grafico mostra anche un costo percentuale - qui, 99% per la ricerca dell'indice cluster - associato all'operatore. Tale costo è relativo agli altri operatori utilizzati nell'esecuzione della query.

Frecce del flusso di dati

Le frecce collegano gli operatori, la cui larghezza riflette il numero di righe di dati che si spostano da un operatore all'altro.

Ad esempio, supponiamo che la tua query generi solo una singola riga di output ma richieda molto tempo per essere completata. Spostando il mouse sulla freccia del flusso di dati nel piano di esecuzione, scoprirai che il numero di righe lette è di milioni. Ciò rappresenta un enorme squilibrio nell'utilizzo delle risorse e rivela un'area che necessita di ottimizzazione.

Descrizione comando

Come mostrato di seguito, quando passi il mouse su un operatore, vengono visualizzati suggerimenti con più statistiche sul flusso di dati.

Finestra Proprietà

La finestra Proprietà visualizza informazioni dettagliate sugli operatori e sui loro componenti. Questo è un superset dei suggerimenti.

2. Piano di esecuzione di SQL Server in formato XML

Il piano di esecuzione XML è in un formato strutturato specifico. Sebbene il formato XML sia visivamente meno intuitivo, contiene tutti i dettagli in XML e non richiede passaggi aggiuntivi per visualizzare proprietà e suggerimenti. Puoi convertire facilmente il formato XML in formato grafico e viceversa.

Per convertire un piano di esecuzione grafico in formato XML, fai clic con il pulsante destro del mouse su di esso e scegli Mostra XML piano di esecuzione , come mostrato di seguito.

Il risultato è il seguente piano di esecuzione strutturato in formato XML.

I seguenti comandi generano anche il piano di esecuzione in formato XML:

  • Per il piano stimato:SET SHOWPLAN_XML ON
  • Per il piano effettivo: SET STATISTICS_XML ON

3. Piano di esecuzione di SQL Server in formato testo

Puoi generare il piano di esecuzione in diversi modi:

  • IMPOSTA SHOWPLAN_TEXT SU

Questo comando genera la stima piano di esecuzione, senza informazioni dettagliate sull'esecuzione della query. È destinato ad applicazioni come l'utilità sqlcmd.

  • IMPOSTA SHOWPLAN_ALL ON

Questo comando genera la stima piano di esecuzione, con informazioni dettagliate su tutti gli operatori e le operazioni in formato tabellare.

  • IMPOSTA IL PROFILO DELLE STATISTICHE

Questo comando genera un piano di esecuzione effettivo, dopo l'esecuzione della query, in formato tabellare.

Perché i piani di esecuzione stimati ed effettivi di SQL Server sono diversi?

I piani di esecuzione stimati ed effettivi sono generalmente simili, sebbene alcune circostanze possano farli differire.

Statistiche non aggiornate

Il motivo principale delle differenze tra i piani di esecuzione stimati e quelli effettivi sono le statistiche obsolete.

Query Optimizer utilizza le statistiche per creare un piano di esecuzione delle query conveniente e ottimizzato. Se le tue statistiche non vengono aggiornate o se il campionamento dei dati non è appropriato, Query Optimizer eseguirà un'ottimizzazione completa e creerà un piano di esecuzione basato sulle vecchie informazioni. Puoi anche ottenere un piano di esecuzione inefficiente che potrebbe causare problemi di prestazioni delle query.

Le statistiche obsolete a volte si verificano quando i dati cambiano frequentemente e le statistiche non vengono aggiornate in base alla manutenzione dell'indice.

Piano di esecuzione di SQL Server seriale o parallelo

In fase di compilazione, Query Optimizer crea un piano di esecuzione e produce un piano seriale o parallelo a seconda del costo della query e della soglia di costo del parallelismo. Sebbene il piano di esecuzione possa essere lo stesso sia per la modalità seriale che per quella parallela, SQL Server decide tra di esse in base alle risorse e all'attività del server.

Stime non valide

Come accennato in precedenza, Algebrizer associa i nomi degli oggetti prima di eseguire la query SQL. Supponi di specificare che una tabella denominata test verrà CREATA in fase di esecuzione, quindi prova a generare un piano di esecuzione stimato. Poiché quella tabella non esiste, riceverai un messaggio di errore, come mostrato di seguito.

Utilizzo del piano di esecuzione

In sintesi, puoi generare un piano di esecuzione di SQL Server in formato grafico, XML e di testo e utilizzarlo per risolvere i tuoi problemi di prestazioni del database.

I piani di esecuzione delle query sono passaggi primari nell'identificazione del flusso di lavoro, degli operatori e dei componenti delle query in modo da poter ottimizzare le query per qualsiasi possibile miglioramento. Per ulteriori informazioni sull'utilizzo dei piani di esecuzione, consulta il nostro post: Come leggere e analizzare i piani di esecuzione.