Вопрос

Как можно профилировать несколько запросов, выполняемых из приложения ASP.NET?Есть программное обеспечение, над которым я работаю, которое работает очень медленно из-за базы данных (я думаю).В таблицах есть индексы, но они все равно тянутся, потому что работают с большим количеством данных.Как я могу профилировать, чтобы увидеть, где я могу внести несколько незначительных улучшений, которые, как мы надеемся, приведут к значительному увеличению скорости?

Редактировать:Я хотел бы добавить, что веб-сервер любит отключать время ожидания во время этих длинных запросов.

Это было полезно?

Решение

В Sql Server есть несколько отличных инструментов, которые помогут вам в этой ситуации.Эти инструменты встроены в Management Studio (которая раньше называлась Enterprise Manager + Query Analyzer).

Используйте SQL Profiler, чтобы показать фактические запросы, поступающие из веб-приложения.

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

Вы также можете запустить мастер настройки (кнопка находится рядом с «показать фактический план выполнения»).Он выполнит запрос и внесет предложения.

Обычно, если у вас уже есть индексы, а запросы по-прежнему выполняются медленно, вам придется переписать запросы по-другому.

Хранение всех ваших запросов в хранимых процедурах делает эту работу много Полегче.

Другие советы

Для профилирования SQL Server используйте SQL-профилировщик.

И вы можете использовать Профайлер ANTS от Red Gate для профилирования вашего кода.

Еще один профилировщик .NET, который хорошо работает с ASP.NET, — точкаТрейс.Я лично использовал его и обнаружил множество узких мест в своем коде.

Я считаю, что у вас есть ответ, который вам нужен для профилирования запросов.Однако это самая простая часть настройки производительности.Если вы знаете, что проблема связана с запросами, а не с сетью или приложением, как найти и устранить проблему?

Настройка производительности — сложная вещь.Но есть места, на которые стоит обратить внимание в первую очередь.Вы говорите, что возвращаете много данных?Вы возвращаете больше данных, чем вам нужно?Вы действительно возвращаете только те столбцы и записи, которые вам нужны?Возврат 100 столбцов с помощью select * может быть намного медленнее, чем возврат 5 столбцов, которые вы фактически используете.

Актуальны ли ваши индексы и статистика?Узнайте, как обновить статистику и переиндексировать в BOL, если вы давно этого не делали.Есть ли у вас индексы по всем полям соединения?Как насчет полей в предложенииwhere?

Вы использовали курсор?Вы использовали подзапросы?Как насчет объединения? Если вы его используете, можно ли его изменить на объединение всех?

Доступны ли ваши запросы (погуглите, если вы не знакомы с этим термином.)

Используете ли вы различные вместо группировки?

Вы получаете замки?

Есть много других вещей, на которые стоит обратить внимание, это только отправная точка.

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

SET STATISTICS TIME ON
SET STATISTICS IO ON

Когда вы включаете статистику в анализаторе запросов, она отображается на вкладке «Сообщения» панели «Результаты».

Статистика ввода-вывода оказалась для меня особенно полезной, поскольку она позволяет мне узнать, может ли мне понадобиться индекс.Если я увижу большое количество операций чтения из статистики ввода-вывода, я могу попробовать добавить другие индексы в затронутые таблицы.Пробуя индекс, я снова запускаю запрос, чтобы проверить, уменьшилось ли количество операций чтения.После нескольких итераций мне обычно удается найти лучший индекс(ы) для задействованных таблиц.

Вот ссылки на MSDN для этих команд статистики:

УСТАНОВИТЬ ВРЕМЯ СТАТИСТИКИ

НАСТРОЙКА СТАТИСТИКИ В/В

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top