Come posso misurare al meglio le prestazioni della query?


19

Ho 2 stored procedure, in cui la seconda stored procedure è un miglioramento della prima.

Sto provando a misurare esattamente quanto sia un miglioramento.

1 / La misurazione clock timenon sembra essere un'opzione poiché ottengo tempi di esecuzione diversi. Ancora peggio, a volte (raramente, ma succede) il tempo di esecuzione della seconda procedura memorizzata è maggiore del tempo di esecuzione della prima procedura (suppongo che a causa del carico di lavoro del server in quel momento).

2 / Include client statisticsfornisce anche risultati diversi.

3 / DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHEsono buoni, ma la stessa storia ...

4 / SET STATISTICS IO ONpotrebbe essere un'opzione, ma come posso ottenere un punteggio complessivo visto che ho molte tabelle coinvolte nelle mie procedure memorizzate?

5 / Include actual execution planpotrebbe essere anche un'opzione. Ottengo uno estimated subtreecostdi 0,3253 per la prima procedura memorizzata e 0,3079 per la seconda. Posso dire che la seconda procedura memorizzata è più veloce del 6% (= 0,3253 / 0,3079)?

6 / Utilizzo del campo "Letture" dal profiler di SQL Server?

Quindi, come posso dire che la seconda procedura memorizzata è x% più veloce della prima procedura, indipendentemente dalle condizioni di esecuzione (il carico di lavoro del server, il server in cui vengono eseguite queste procedure memorizzate, ecc.)?

Se ciò non è possibile, come posso dimostrare che la seconda procedura memorizzata ha un tempo di esecuzione migliore rispetto alla prima procedura memorizzata?

Risposte:


17

Mi piace usare lo strumento gratuito SQLQueryStress quando si confronta uno scenario prima e dopo. Con SQLQueryStress puoi eseguire ogni procedura memorizzata tutte le volte che vuoi e ottenere le statistiche medie totali per tutte le esecuzioni.

Ad esempio, è possibile eseguire ogni procedura memorizzata 100 volte, quindi utilizzare le statistiche per eseguire il backup dei miglioramenti. "Oltre 100 esecuzioni, i miei miglioramenti risparmiano un totale di 30 secondi e il proc memorizzato fa 1500 letture in meno per esecuzione." Penso che tu abbia avuto l'idea.

Se ci sono parametri nel proc memorizzato, è sempre una buona idea verificare che i tuoi miglioramenti funzionino con molti diversi set di parametri. SQLQueryStress fa alcune cose interessanti con la possibilità di sostituire i parametri nella query per ottenere un quadro complessivo migliore di come potrebbe essere eseguito il proc memorizzato.

Documentazione di SQLQueryStress: http://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress



3

Dopo aver raccolto i tempi di esecuzione in un paio di giorni per le tue due procedure memorizzate, ti consiglio di utilizzare questa homepage

http://www.evanmiller.org/ab-testing/t-test.html

per vedere se sono effettivamente diversi.

La differenza del 6% non suona tanto, quando si tratta di miglioramenti delle procedure memorizzate. Mi aspetto due ordini di grandezza dal mio collega e faccio finta di essere deluso se raggiunge un solo ordine di grandezza ...

Non deve utilizzare la home page di EvanMiller per dimostrare che la sua soluzione funziona più velocemente.

Vorrei anche installare SQLSentrys (modifica :) Plan Explorer da http://www.sqlsentry.com/ poiché questo è uno strumento molto migliorato per confrontare i piani di esecuzione.

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.