SQL Server 2008: стоимость производительности для одного оператора SQL - PullRequest
0 голосов
/ 14 февраля 2011

У меня есть 2 хранимые процедуры, которые я хочу сравнить и определить, какая из них требует меньше ресурсов и работает лучше. Вторая процедура является модификацией первой процедуры и содержит слегка измененные операторы sql первой процедуры. Моя цель - понять влияние изменений в стоимости запроса.

Для этого я выполняю каждую процедуру отдельно с опцией «Включить фактический план выполнения» и анализирую оба плана выполнения. Моя проблема в том, что я не могу сказать, какой SQL-запрос работает лучше простым способом.

Например, рассмотрим следующий план выполнения запроса первой хранимой процедуры:

enter image description here

План показывает, что стоимость запроса составляет 0% относительно пакета , а оператор Поиск кластерного индекса равен 100% относительно запроса. У меня те же цифры для соответствующего запроса второй процедуры. К сожалению, этого недостаточно, чтобы понять, какой запрос имеет минимальную стоимость.

Поэтому мой вопрос: есть ли способ определить стоимость всего запроса. Лучше всего будет таблица с запросом и его конкретной стоимостью, например, Стоимость процессора или стоимость ввода / вывода.

Ответы [ 2 ]

9 голосов
/ 14 февраля 2011

Вы можете использовать SET STATISTICS IO ON (http://msdn.microsoft.com/en-us/library/ms184361.aspx) и SET STATISTICS TIME ON (http://msdn.microsoft.com/en-us/library/ms190287.aspx)) перед запуском обеих процедур. Это покажет дополнительную информацию о времени и вводе / выводе. Помните, что результаты процедур могут быть кэшированы, планы могут быть кэшируется, поэтому вы должны сделать это осторожно, прежде чем делать какие-либо выводы. Первый запуск всегда может быть медленнее, чем следующие. Перед выполнением каких-либо тестов следует очистить кэш с помощью DBCC DROPCLEANBUFFERS и DBCC FREEPROCCACHE. Также следует прочитать о различиях между кластерным и некластеризованным индексом, поиском и сканированием и другими действиями, представленными в плане.

3 голосов
/ 14 февраля 2011

Вы можете отслеживать запросы в профилировщике SQL. Там вы получаете CPU, IO, общее время и т. Д. Для каждого выполняемого запроса.

...