Jak najlepiej zmierzyć wydajność zapytania?

19

Mam 2 procedury składowane, przy czym druga procedura składowana jest ulepszeniem pierwszej.

Próbuję dokładnie zmierzyć, ile to jest ulepszenie.

1 / Pomiar clock timenie wydaje się być opcją, ponieważ otrzymuję różne czasy wykonania. Co gorsza, czasami (rzadko, ale się zdarza) czas wykonania drugiej procedury składowanej jest dłuższy niż czas wykonania pierwszej procedury (chyba ze względu na obciążenie serwera w tym momencie).

2 / Include client statisticszapewnia również różne wyniki.

3 / DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHEsą dobre, ale ta sama historia ...

4 / SET STATISTICS IO ONmoże być opcją, ale jak mogę uzyskać ogólny wynik, ponieważ w moich procedurach przechowywanych jest wiele tabel?

5 / Include actual execution planmoże być również opcją. Dostaję estimated subtreecost0,3253 dla pierwszej procedury składowanej i 0,3079 dla drugiej. Czy mogę powiedzieć, że druga procedura przechowywana jest o 6% szybsza (= 0,3253 / 0,3079)?

6 / Korzystanie z pola „Odczytuje” z SQL Server Profiler?

Więc jak mogę powiedzieć, że druga procedura przechowywana jest x% szybsza niż pierwsza procedura, bez względu na warunki wykonania (obciążenie serwera, serwera, na którym te procedury przechowywane są wykonywane itp.)?

Jeśli nie jest to możliwe, jak mogę udowodnić, że druga procedura przechowywana ma lepszy czas wykonania niż pierwsza procedura przechowywana?

Mihai Bejenariu
źródło

Odpowiedzi:

17

Podczas porównywania scenariusza przed i po lubię korzystać z bezpłatnego narzędzia SQLQueryStress . Dzięki SQLQueryStress możesz wykonać każdą procedurę przechowywaną tyle razy, ile chcesz, i uzyskać łączne średnie statystyki dla wszystkich wykonań.

Na przykład, możesz wykonać każdą procedurę przechowywaną 100 razy, a następnie użyć statystyk, aby wykonać kopię zapasową swoich ulepszeń. „Ponad 100 wykonań, moje ulepszenia oszczędzają w sumie 30 sekund, a zapisany proces wykonuje 1500 odczytów mniej na wykonanie”. Myślę, że masz pomysł.

Jeśli w przechowywanym proc znajdują się parametry, zawsze warto dokładnie sprawdzić, czy ulepszenia działają z wieloma różnymi zestawami parametrów. SQLQueryStress robi kilka fajnych rzeczy, pozwalając na zastąpienie parametrów w zapytaniu, aby uzyskać lepszy ogólny obraz wydajności przechowywanego proc.

Dokumentacja SQLQueryStress: http://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress

GoodwinSQL
źródło
6

4 / Możesz przejść do strony http://statisticsioparser.com/statisticsioparser/ i wkleić statystyki, aby zobaczyć ogólny wynik.

Nelson G.
źródło
Odczyty logiczne: 3101 vs 2943. Odczyty z wyprzedzeniem: 0 vs 8. Liczba skanów: ogółem 637. Odczyty fizyczne: 0 ogółem. Odczyt logiczny LOB: ogółem 156.
Mihai Bejenariu
3

Po zebraniu w ciągu kilku dni czasu wykonania dwóch procedur składowanych zalecę skorzystanie z tej strony głównej

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

aby sprawdzić, czy faktycznie są różne.

Różnica 6% nie wydaje się tak duża, jeśli chodzi o poprawę procedur przechowywanych. Zacząłem oczekiwać od mojego kolegi dwóch rzędów wielkości i udaję, że jestem rozczarowany, jeśli osiągnie tylko jeden rząd wielkości ...

Nie musi używać strony głównej EvanMiller, aby udowodnić, że jego rozwiązanie działa szybciej.

Zainstalowałbym także SQLSentrys (edycja :) Plan Explorer ze strony http://www.sqlsentry.com/, ponieważ jest to znacznie ulepszone narzędzie do porównywania planów wykonania.

Henrik Staun Poulsen
źródło