Come ottenere prestazioni accurate delle query?


9

Sto tentando di migliorare le prestazioni di una procedura memorizzata. Quando eseguo SP, termina quasi all'istante, come se qualcosa fosse memorizzato nella cache. Mi è stato detto di utilizzare le seguenti due righe di SQL prima di eseguire l'SP in SSMS:

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Quando eseguo l'SP con le due righe di codice sopra l'SP termina in circa 8 secondi. Tuttavia, questo mi sta davvero dando il vero tempo di esecuzione (come se lo avessi eseguito da un'applicazione)? Come lo so?


Risposte:


9

Quei comandi fanno due cose:

  • Svuota la cache delle pagine, che memorizza le pagine di dati che sono già state recuperate dal disco (normalmente il fattore maggiore nel tempo in una query è l'accesso al disco)
  • Svuota la cache del piano di query, il che significa che il server deve creare un nuovo piano di query. Questo di solito non è significativo tranne che per volumi di transazioni molto elevati.

Praticamente stai ottenendo un tempo equivalente allo scenario "peggiore": hai appena riavviato il server e nulla è in memoria. Le esecuzioni successive non devono pagare i costi per estrarre i dati dal disco poiché tali pagine sono già state caricate in memoria.

Ciò è simile a una situazione reale: il tuo primo utente che eseguirà una determinata query dovrà probabilmente attendere più a lungo rispetto alle esecuzioni successive, supponendo che tu stia controllando gli stessi dati.

Un buon metodo che mi piace usare è correre più volte e prendere una media. Ciò è particolarmente utile in un ambiente condiviso poiché non si ha il pieno controllo delle risorse condivise come tempdb.

Puoi anche usare questi comandi per ottenere maggiori informazioni su ciò che sta realmente accadendo dietro le quinte:

SET STATISTICS IO ON
SET STATISTICS TIME ON

Ciò fornirà informazioni dettagliate sulle letture di pagine dal disco (per oggetto), letture logiche di pagine, tempo impiegato per la compilazione di un piano e tempo impiegato per eseguire una query.


ottima risposta come al solito JNK.
OO,

Felice di aiutare! Ti capita di fare domande su cose che ho affrontato molto. Se chiedi della replica o della gestione della memoria non avrò molto da aggiungere :)
JNK

2
Sapevo di SET STATISTICS IO ON, ma non ho mai saputo di SET STATISTICS TIME ON. Grazie JNK.
datagod

2
Solo FYI è possibile ottenere molte di queste informazioni senza tutte le impostazioni SET generando piani effettivi utilizzando SQL Sentry Plan Explorer. E per ottenere più esecuzioni (diciamo, 5) puoi semplicemente terminare il batch GO 5proprio come in SSMS. È un download gratuito, non sto cercando di venderti nulla. sqlsentry.net/plan-explorer/sql-server-query-view.asp
Aaron Bertrand

1
@JNK, certo, è gratuito, fa risparmiare tempo e mostra informazioni che sono impossibili o molto ingombranti per uscire da Management Studio. E io lavoro lì. :-)
Aaron Bertrand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.