Каков наилучший способ определить самый медленный блок запроса SQL? - PullRequest
0 голосов
/ 05 июня 2009

Я столкнулся с проблемой, заключающейся в том, что для запуска хранимой процедуры требуется слишком много ресурсов, что иногда приводит к превышению времени ожидания на сервере (особенно, когда загрузка ЦП превышает 90%).

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

  • Я использую SQL Server 2005

Ответы [ 5 ]

5 голосов
/ 05 июня 2009

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

3 голосов
/ 05 июня 2009

Если вы хотите узнать, какой блок самый медленный, используйте следующее

УСТАНОВИТЬ ПРОФИЛЬ СТАТИСТИКИ НА

УСТАНОВИТЬ СТАТИСТИКУ IO ON

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

При запуске SP будет отображаться статистика для каждого запроса.

0 голосов
/ 05 июня 2009

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

Графическое представление плана запроса в SSMS довольно полезно, поскольку оно показывает вам% стоимости каждого оператора по отношению к стоимости всего пакета / обработки. Но это единственное значение, поэтому иногда может быть полезно просто запустить Profiler и включить вывод на уровне операторов. Профилировщик предоставит вам отдельные затраты ввода-вывода и загрузки ЦП для каждого оператора, если вы добавите событие SQL: StmtCompleted и столбцы ЦП и операции чтения.

0 голосов
/ 05 июня 2009

Вам не нужно использовать SQL Profiler для просмотра плана выполнения - просто:

SET SHOWPLAN_XML ON
0 голосов
/ 05 июня 2009

Если вы используете студию SQl Server Management, вы можете включить план выполнения, чтобы отобразить информацию о том, как запрос будет выполняться сервером sql, в том числе какой процент всего процесса будет обрабатываться каждым подпроцессом.

часто при этом возникает часть запроса, которая, очевидно, использует большую часть ресурсов.

используя эту информацию, вы можете принять обоснованное решение о настройке базы данных. (например, добавление индекса в таблицу (ы), вызывающие проблемы)

...