2009-09-22 5 views
9

Я использую версию SQL Server 2005, которая не поддерживает профилировщик, пытаясь выяснить, как лучше сравнить производительность двух хранимых процедур. Я выполнил план выполнения для каждого, но мне непонятно, какую из предоставленных показателей я должен сосредоточить. Поступаю ли я и добавляю различные расходы? Какой лучший подход?Как вы оцениваете эффективность хранимой процедуры?

Заранее спасибо.

ответ

17

Посмотрите на эту статью: Measuring SQL Performance

Если вы не хотите регистрироваться на бесплатный аккаунт, здесь есть решение 1:

DECLARE @start datetime, @stop datetime 
SET @start = GETDATE() 
EXEC your_sp 
SET @stop = GETDATE() 

второй:

SET STATISTICS TIME ON 
EXEC your_sp 

третий:

SET STATISTICS IO ON 
EXEC your_sp 

Кстати, на этом сайте есть интересные статьи. Я бы рекомендовал зарегистрироваться. Это бесплатно.

+4

Требуется регистрация. –

+0

Да, я забыл. Я исправил свой ответ сейчас. –

+5

1-й вариант не забывайте _PRINT 'Took:' + CONVERT (varchar (20), dateiff (ms, @ start, @ stop) /1000.0) + 'seconds'_ –

1

Вопрос в том, для чего вы оптимизируете? Используется ли скорость или ресурсы?

Если скорость, то в анализаторе запросов я бы посмотрел на выполнение между несколькими запусками, внеся изменения и время их снова.

Если это ресурсы, я просмотрю план выполнения. В этом случае я начну с худших нарушителей и проделаю свой путь вниз по списку. Их добавление покажет вам всю производительность, но в большинстве случаев это предмет или 2, это шея бутылки.

0

Как и большинство вопросов, ответ зависит ... В конечном счете единственной мерой, которая имеет значение, является восприятие конечного пользователя, на которое могут воздействовать многие вещи, в том числе не только хранимая процедура, но и производительность сети, использование шаблоны (называется sProc 20x/day или 1000x/sec?) и т. д., и sProc не может быть определяющим фактором.

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

0

Вы всегда можете установить испытательный жгут для вызова хранимых процедур и измерения времени вызова. К сожалению, вы не сможете получить информацию о том, какие именно части хранимой процедуры вызывают замедление.

Вы всегда можете запустить хранимую процедуру вручную в Query Analyzer и измерить результаты таким же образом. Утилита .NET просто автоматизирует процесс для вас.

0

Простое решение с низкими бровями предназначено для запуска их с помощью операторов печати, распечатывающих время выполнения по различным частям. Это не поможет, если проблема с производительностью более тонкая и найдена только в производстве, но если вы можете воспроизвести ее в тестовой среде, вы должны быть в порядке.

0

Один удобный метод, если вы пытаетесь сравнить производительность двух procs или операторов состоит в том, чтобы выбрать оба блока sql в анализаторе запросов и запустить план запроса. В плане указывается процент затрат каждого блока относительно друг друга. Это не полное доказательство. Я видел, как он сказал мне, что дешевле, когда на самом деле он был намного дороже, но по большей части это хороший, быстрый трюк.

+0

также, убедитесь, что SET IO STATISTICS ON и запустите каждый блок. Это расскажет вам, сколько IO потребляет каждый. –