Як найкраще виміряти ефективність запиту?


19

У мене є 2 збережені процедури, де друга збережена процедура є вдосконаленням першої.

Я намагаюся точно оцінити, наскільки це поліпшення.

1 / Вимірювання clock time, здається, не є варіантом, оскільки я отримую різні терміни виконання. Ще гірше, іноді (рідко, але трапляється) час виконання другої збереженої процедури більший, ніж час виконання першої процедури (я думаю, через завантаженість сервера на той момент).

2 / Include client statisticsтакож дає різні результати.

3 / DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHEхороші, але та сама історія ...

4 / SET STATISTICS IO ONможе бути варіантом, але як я можу отримати загальну оцінку, оскільки в моїх збережених процедурах є багато таблиць?

5 / також Include actual execution planможе бути варіантом. Я отримую estimated subtreecost0,3253 за першу збережену процедуру і 0,3079 за другу. Чи можу я сказати, що друга збережена процедура на 6% швидша (= 0,3253 / 0,3079)?

6 / Використання поля "Читання" від SQL Server Profiler?

Тож як я можу сказати, що друга збережена процедура на x% швидша, ніж перша процедура, незалежно від умов виконання (завантаженість сервера, сервера, на якому виконуються ці збережені процедури тощо)?

Якщо це неможливо, як я можу довести, що друга збережена процедура має кращий час виконання, ніж перша збережена процедура?

Відповіді:


17

Мені подобається використовувати безкоштовний інструмент SQLQueryStress для порівняння сценарію до та після. За допомогою SQLQueryStress ви можете виконати кожну збережену процедуру стільки разів, скільки вам потрібно, і отримати загальну середню статистику для всіх виконань.

Наприклад, ви можете виконати кожну збережену процедуру 100 разів, а потім скористатися статистикою, щоб створити резервну копію вдосконалень. "Більше 100 виконання, мої вдосконалення заощаджують в цілому 30 секунд, а збережена програма робить на 1500 менше читання за виконання." Я думаю, ви зрозуміли ідею.

Якщо в збереженій програмі є параметри, завжди добре перевірити, чи працюють ваші удосконалення з багатьма різними наборами параметрів. SQLQueryStress виконує деякі цікаві речі, дозволяючи вам замінювати параметри у вашому запиті, щоб отримати кращу загальну картину того, як може працювати збережений додаток.

Документація до SQLQueryStress: http://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress


6

4 / Ви можете зайти на http://statisticsioparser.com/statisticsioparser/ і вставити свою статистику, щоб побачити загальний бал.


Логічні показники: 3101 проти 2943. Читання вперед читає: 0 проти 8. Кількість сканів: 637 в цілому. Фізичні читання: 0 загалом. Логічні читання LOB: в цілому 156.
Mihai Bejenariu

3

Коли ви збираєте час виконання протягом двох днів для ваших двох збережених процедур, я рекомендую вам скористатися цією домашньою сторінкою

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

щоб побачити, чи насправді вони різні.

Різниця в 6% виглядає не так сильно, якщо мова йде про покращення збережених процедур. Я очікував від колеги два порядки, і я прикидаюся розчарованим, якщо він досягне лише одного порядку величини ...

Йому не потрібно використовувати домашню сторінку EvanMiller, щоб довести, що його рішення працює швидше.

Я також встановив би SQLSentrys (редагуйте :) Провідник плану від http://www.sqlsentry.com/, оскільки це набагато вдосконалений інструмент для порівняння планів виконання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.