Piani di esecuzione stimati vs effettivi di Microsoft SQL Server

Supponiamo che tu stia costruendo una nuova casa e hai un contratto con un costruttore. Dopo aver esaminato attentamente l'area, l'altezza e i materiali necessari, stima che ci vorranno 120 giorni per costruire una nuova casa. Dopo aver costruito la casa, ci sono voluti 200 giorni per realizzarlo.

C'è una differenza tra la sua stima e il risultato reale. Questo vale anche per i piani di esecuzione delle query nel server SQL, in particolare i piani di esecuzione Stimati rispetto a quelli effettivi.

Questo tutorial contiene un Piano di esecuzione stimato così come un Piano di esecuzione reale in SQL Server.

Piani di esecuzione stimati rispetto a quelli effettivi: che cos'è un piano di esecuzione?

Il piano di esecuzione è un tentativo di ottimizzazione delle query per trovare il modo meno efficiente ed economico per eseguire una query T-SQL. Per produrre un piano di esecuzione, il server SQL utilizza algoritmi, statistiche, permutazioni e combinazioni di join e indici diversi per generare un piano di esecuzione efficiente per una query.

Query Optimizer tenta sempre di generare un piano di esecuzione che consenta di eseguire la query più rapidamente con meno utilizzo di CPU e I / O.

Può mostrare che una tabella sta eseguendo una scansione della tabella a causa di un indice mancante. Per iniziare con i problemi di prestazioni, la maggior parte delle volte è necessario esaminare il piano di esecuzione per avere un'idea generale di dove la query è in ritardo.

Piano di esecuzione stimato

1. Un piano di esecuzione stimato viene generato senza eseguire effettivamente la query. Si basa sulle statistiche disponibili sugli indici.

2. I piani di esecuzione stimati vengono emessi da Query Optimizer. Quindi, è considerato come un piano logico.

3. Il piano di esecuzione stimato è sempre lo stesso del piano di esecuzione effettivo, ma può differire a causa di statistiche non aggiornate, modifiche nella struttura della tabella sottostante, operazioni di inserimento / eliminazione / aggiornamento enormi, indici mancanti e altri fattori.

4. Potrebbe non riuscire a generare un piano di esecuzione stimato se una procedura comporta la creazione di tabelle temporanee o variabili di tabella. Poiché una query di piano stimata non viene eseguita, le tabelle temporanee non vengono considerate durante la produzione di un piano di esecuzione stimato.

Piano di esecuzione effettivo

1. Un piano di esecuzione effettivo viene generato dopo l'esecuzione della query. È più informativo e affidabile in quanto basato sull'effettiva esecuzione non su statistiche stimate.

2. Un piano di esecuzione effettivo può richiedere più tempo per generare se la query è complessa in quanto deve eseguire la query per generare un piano. Se hai una query complessa, è meglio controllare prima il piano stimato.

3. Lavorare con un piano di esecuzione reale è affidabile mentre si risolvono i problemi relativi alle prestazioni, in quanto ci fornisce le informazioni reali e corrette.

Ottenere un piano di esecuzione stimato

Sono disponibili varie opzioni per generare un piano di esecuzione stimato.

1. Seleziona una query. Fare clic con il tasto destro su una finestra di interrogazione e selezionare Visualizza piano di esecuzione stimato.

2. Fare clic sul Visualizza il piano di esecuzione stimato opzione nella barra degli strumenti principale.

3. Selezionare una query, quindi premere CTRL + L combinazione di tasti della tastiera.

Ottenere un piano di esecuzione reale

1. Clicca su Piano di esecuzione stimato attuale opzione nella barra degli strumenti principale.

2. Selezionare una query, quindi premere CTRL + M combinazione di tasti della tastiera.

Esempio:

Non è possibile ottenere un piano stimato per le query che coinvolgono le tabelle temporanee, poiché una query viene effettivamente eseguita dal motore di query per ottenere il piano di esecuzione stimato.

Seleziona la query. Fare clic su Visualizza piano di esecuzione stimato e si otterrà un errore.

Nome oggetto non valido "#TempTable".

USE master SELECT * INTO #TempTable FROM master ... spt_values; seleziona * da #TempTable; 

Maggiori informazioni sulla programmazione di database e SQL pubblicati su Tech-Recipes.