Время, затрачиваемое подкомпонентами в запросе SQL Server - PullRequest
0 голосов
/ 17 декабря 2011

Я работаю над настройкой хранимой процедуры. Это огромный хранимый процесс, объединяющий таблицы с 6-7 миллионами записей.

Мой вопрос заключается в том, как определить время, проведенное в компонентах процедуры. У proc есть 1 большой выбор со многими временными таблицами, созданными на лету (читай подзапросы).

Я пытался использовать SET STATISTICS TIME ON, SET SHOWPLAN_ALL ON.

Я хочу выделить фрагмент кода, который занимает больше всего времени, и не уверен, как это сделать.

Пожалуйста, помогите.

PS: я пытался гуглить, искал в Stackoverflow .......... Не повезло. Вот один вопрос, который я посмотрел Как улучшить запрос SQL Server, содержащий вложенный подзапрос

Любая помощь очень ценится. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Я бы попробовал SQL Planent SQL Sentry. Это дает вам визуальную помощь в поиске проблемы. Это также бесплатный инструмент. В нем выделены биты, которые стоят дорого ввода-вывода или ЦП, вместо общего процента.

Вот где вы можете проверить это: http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp

Эрик

0 голосов
/ 17 декабря 2011

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

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

1 - выполнить базовый прогон

2 - Добавьте команды PRINT или RAISERROR между частями, которые возвращают текущее время, чтобы помочь определить, какие шаги занимают больше всего времени.

3 - Разбивать запросы по отдельности. Обычно я запускаю порции самостоятельно (без учета условий JOIN), чтобы увидеть, что такое дисперсия. Если это очень длительный запрос, вы можете добавить предложение TOP к любому SELECT s, чтобы ограничить возврат. Пока вы последовательны, это все равно даст вам хорошую идею.

4 - настроить компоненты из шага 3, которые занимают больше всего времени. Если у вас есть сложные подзапросы, возможно, сделайте их индексированными #temp таблицами, чтобы посмотреть, поможет ли это. CTE s, как правило, никогда не помогают производительности, поэтому вам, возможно, придется их материализовать.

0 голосов
/ 17 декабря 2011

Я понимаю, что вы спрашиваете о «времени» (как долго), но, возможно, вам следует сосредоточиться на «что». Я имею в виду настройку на план выполнения. В идеале, использование «Показать план выполнения» даст вам самый большой удар. И он скажет вам, через проценты, где это стоит больше всего ресурсов. Если вы работаете в SSMS 2008, щелкните правой кнопкой мыши в окне запроса и выберите «Включить план выполнения».

...