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

Come leggere e analizzare i piani di esecuzione di SQL Server

I piani di esecuzione di SQL Server sono un gateway per Query Optimizer e le esecuzioni di query per i professionisti del database. Rivelano l'elaborazione delle query e le fasi coinvolte come tabelle interessate, indici, statistiche, tipi di join, numero di righe interessate, elaborazione delle query, ordinamento e recupero dei dati.

In un precedente articolo, Piano di esecuzione di SQL Server:che cos'è e in che modo aiuta con i problemi di prestazioni? abbiamo esplorato il flusso di lavoro di esecuzione delle query di alto livello, i diversi tipi di piani di esecuzione (grafici, XML e di testo), insieme ai piani di esecuzione effettivi e stimati.

Ora esploreremo le cose che devi sapere quando valuti i piani di esecuzione di SQL Server e come interpretare al meglio le informazioni.

Lettura di un piano di esecuzione grafico di SQL Server

In genere, leggiamo i piani di esecuzione da destra a sinistra. Inizi con l'operatore del piano di esecuzione in alto a destra e ti sposti verso sinistra. Ti aiuta a seguire il flusso di dati logico nella query.

Si supponga di eseguire la query seguente in un database di esempio [AdventureWorks2019] e di visualizzare il piano di esecuzione effettivo.

SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

La query recupera i dati dalla tabella [Sales].[SalesOrderDetail] per gli ordini con un prezzo unitario maggiore di 1.000.

Se leggiamo il piano di esecuzione da destra a sinistra, noteremo quanto segue:

  • Il primo operatore è la scansione dell'indice cluster che legge i dati dalla tabella [Sales].[SalesOrderDetail]. Quando porti il ​​puntatore del mouse sulla freccia che collega la scansione indice cluster e l'operatore principale, viene restituito il numero di righe stimato ed effettivo e la dimensione dei dati stimata.

  • Passa i dati dall'operatore Clustered Index Scan all'operatore Top passa le 10 righe all'operatore SELECT.

Internamente, SQL Server esegue il piano da sinistra a destra. Se sei interessato agli ordini fisici dell'operatore, dovresti leggere un piano di esecuzione da sinistra a destra. Ciascun operatore richiede dati all'operatore successivo. Ad esempio, nello scenario precedente, l'operatore Top richiede i dati dalla scansione dell'indice cluster. La scansione dell'indice cluster restituisce le righe della tabella [Sales].[SalesOrderDetail] che soddisfa il Where condizione della clausola.

Nel caso in cui più rami si uniscano in un piano di esecuzione, dovresti seguire l'approccio da destra a sinistra, dall'alto verso il basso.

Costi dell'operatore

Ogni operatore in un piano di esecuzione di SQL Server è associato a un costo. Il costo dell'operatore è relativo ad altri costi nel piano di esecuzione. Di solito, dobbiamo concentrarci sull'operatore costoso e regolare la query intorno ad esso.

In caso di un piano di esecuzione complicato, potrebbe essere difficile identificare l'operatore costoso. In questo caso, puoi utilizzare SET SHOWPLAN_ALL ON e fornirà informazioni in formato tabellare.

Puoi anche utilizzare il [testo Stmt] per suddividere il piano di esecuzione a ogni livello di operatore e istruzione.

SQL Server Management Studio (SSMS) offre anche la flessibilità di trovare un operatore in base a criteri di ricerca. A tale scopo, fai clic con il pulsante destro del mouse sul piano di esecuzione e seleziona Trova nodo. Si aprirà una finestra con varie condizioni di ricerca. Specifica il tuo requisito e punterà al nodo particolare, come mostrato di seguito.

In alternativa, puoi usare Azure Data Studio e passare a Esegui query corrente con piano effettivo  sotto la tavolozza dei comandi. Ciò fornisce un piano di esecuzione effettivo in una forma compatta, insieme alle operazioni principali per identificare rapidamente gli operatori costosi.

Analisi Showplan

È possibile identificare una stima della cardinalità imprecisa per indagare sui piani di esecuzione problematici. Questo ti fornirà brevi informazioni sulla ricerca di un particolare operatore e consigli nella scheda Analisi ShowPlan. È possibile ordinare il risultato nelle colonne differenza, effettivo e stimato per trovare il problema e le raccomandazioni per l'operatore specifico nel piano di esecuzione. Questo è disponibile da SSMS 17.4.

Per fare ciò, fai clic con il pulsante destro del mouse sul piano di esecuzione, quindi fai clic su Analizza il piano di esecuzione effettivo.

Quindi, fai clic sul collegamento ipertestuale in Trovare dettagli . Questo spiegherà i possibili scenari per l'imprecisione della stima e le soluzioni alternative per migliorare queste stime. È un buon punto di partenza per problemi di stima della cardinalità.

Confronta Showplan

Supponi di aver identificato un problema nel piano di esecuzione e di aver implementato una soluzione per risolverlo. Ma come confronterai il piano di esecuzione precedente (com'era prima di implementare la soluzione) e il piano di esecuzione attuale? Il SMS Confronta Showplan la funzionalità ti dà la flessibilità di confrontare due piani di esecuzione. Evidenzia le somiglianze e le differenze tra questi piani.

Di solito, i DBA ricevono una chiamata dagli sviluppatori che una particolare query funziona correttamente in produzione ma richiede molto tempo in un ambiente QA con gli stessi parametri. Un altro caso d'uso è la migrazione a una versione più recente di SQL Server. Si supponga che dopo la migrazione si verifichino problemi con una query che funziona correttamente in una versione SQL inferiore. Puoi utilizzare questo strumento anche per confrontare i piani di esecuzione di diverse versioni SQL e livelli di patch.

Salva il piano di esecuzione in un SQLPlan estensione. Successivamente, puoi fare clic con il pulsante destro del mouse su un altro piano di esecuzione e selezionare Confronta Showplan .

Piani di esecuzione in tempo reale in SSMS

È possibile abilitare un piano di esecuzione in tempo reale di una query attiva. Questo ti darà statistiche in tempo reale sul flusso di dati a diversi operatori. Nelle statistiche di esecuzione del tempo di esecuzione, puoi tenere traccia del tempo trascorso e del numero di righe. È una funzionalità eccellente per la risoluzione dei problemi e il debug dei problemi di prestazioni. Puoi utilizzare le statistiche sulle query in tempo reale da SQL Server 2016 e versioni successive.

Nota:dovresti usare l'ultima versione di SSMS. Fare riferimento a documenti Microsoft per scaricare l'ultima versione di SSMS.

  • Ultima versione attuale:SSMS 18.7.1

Per le statistiche sulle query in tempo reale, attiva Includi statistiche sulle query in tempo reale utilizzando la barra degli strumenti SSMS.

Puoi anche visualizzare il piano di esecuzione in tempo reale da Monitoraggio attività . In Activity Monitor, seleziona il processo desiderato, fai clic con il pulsante destro del mouse per visualizzare il menu e scegli Mostra piano di esecuzione in tempo reale.

Ciò fornisce stime di query in tempo reale insieme al flusso di dati e alle percentuali di completamento dei singoli operatori. Di solito, attendiamo il completamento dell'esecuzione della query e visualizziamo il piano di esecuzione effettivo. Ma supponiamo che la tua query richieda più di 30 minuti per produrre risultati. In questo caso, puoi utilizzare le statistiche di query in tempo reale per tenere traccia dei singoli operatori, del flusso di dati e indicare quale operatore sta impiegando tempo per completare la query. Ad esempio, come mostrato di seguito, la query viene eseguita per 12 minuti e 48 secondi e si stima che la query venga completata al 20%. A livello di operatore, la scansione dell'indice e lo spool di conteggio delle righe sono completati al 41%. Le linee tratteggiate mostrano lo spostamento dei dati.

Revisione dell'utilizzo del piano di esecuzione di SQL Server

I piani di esecuzione di SQL Server sono incredibilmente utili per la risoluzione dei problemi e l'ottimizzazione delle query lente. Ogni professionista del database deve sapere come analizzare e comprendere le informazioni una volta che il piano di esecuzione diventa disponibile. Come spiegato in precedenza, in SSMS e Azure Data Studio sono disponibili vari strumenti che consentono di esaminare e risolvere i problemi relativi alle prestazioni, in particolare la funzionalità Confronta piano è una da sfruttare quando si inizia ad apportare modifiche e valutare le prestazioni.