Существует ли профилировщик SQL Server, аналогичный профилировщикам Java / .Net?

StackOverflow https://stackoverflow.com/questions/153478

Вопрос

Мне нравится, как я могу профилировать приложение Java / .Net, чтобы найти узкие места в производительности или проблемы с памятью.Например, очень легко найти узкое место в производительности, взглянув на дерево вызовов со временем выполнения и количеством вызовов для каждого метода.В SQL Server у меня есть хранимые процедуры, которые вызывают другие хранимые процедуры, зависящие от представлений, что аналогично методам Java / .Net, вызывающим другие методы.Так что, похоже, такой же профилировщик был бы здесь очень полезен.Однако я искал повсюду и не смог найти ни одного.Кто-нибудь знает о таких инструментах для SQL Server или любой другой СУБД?

Обновить:Спасибо за ваши ответы о профилировщике SQL Server, но этот инструмент очень ограничен.Взгляните на скриншот.

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

Решение

Проверьте Инструмент SQL Nexus.Здесь есть несколько хороших отчетов по выявлению узких мест.SQL Nexus - это инструмент, который помогает вам определить основную причину проблем с производительностью SQL Server.Он загружает и анализирует данные о производительности, собранные SQLDiag и PSSDiag.Это может значительно сократить количество времени, которое вы тратите на ручной анализ данных.

В одной из книг Inside SQL 2005 (возможно, T-SQL Querying) была классная техника, при которой автор помещает выходные данные SQL profiler в таблицу или файл Excel и применяет pivot, чтобы получить выходные данные в формате, аналогичном вашему скриншоту.

Я не видел никаких встроенных инструментов SQL, которые давали бы вам такой анализ.Еще один полезный Публикация.

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

В дополнение к SQL Server Profiler, как упоминалось в комментарии от @Galwegian, также ознакомьтесь с вашим планом выполнения при запуске запроса.

http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx
http://en.wikipedia.org/wiki/Query_plan

Еще одна целая тема о профилировщике SQL Server:

Выявление проблем с производительностью SQL Server

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

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

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

Как уже упоминалось, SQL Server Profiler, который отлично подходит для проверки того, какие параметры ваша программа передает в SQL и т.д.Однако он не покажет вам дерево выполнения, если это то, что вам нужно.Для этого все, о чем я могу думать, - это использовать Show Plan, чтобы увидеть, что именно выполняется во время выполнения.Например.если вы вызываете sp, который вызывает представление, Profiler покажет вам только то, что sp был выполнен и какие параметры были переданы.Кроме того, монитор производительности Windows содержит обширные показатели производительности во время выполнения, специфичные для SQL Server.Вы можете запустить его на сервере или подключиться удаленно.

Чтобы найти узкие места в производительности, вы можете использовать советник по настройке ядра базы данных (находится в меню Сервис SQL Server Management Studio.Он предоставляет рекомендации по оптимизации ваших запросов и предлагает автоматически оптимизировать их для вас (например,создайте соответствующие индексы и т.д.).

Вы могли бы использовать SПрофилировщик ql - который охватывает аспект профилирования, но я склонен думать о нем больше как об инструменте ведения журнала.Для диагностики производительности вам, вероятно, следует просто посмотреть на план запроса.

Есть профилировщик sql server, но, несмотря на его название, судя по вашему вопросу, он не делает того, что вы хотите.Он покажет вам подробное представление всех вызовов, происходящих в базе данных.Это лучше для устранения неполадок в приложении в целом, а не только в одном sproc за раз

Звучит так, будто тебе нужно просмотр плана выполнения из ваших запросов /spocs в анализатор запросов и это даст вам что-то похожее на данные, которые вы ищете.

Как упоминалось в нескольких ответах, профилировщик SQL покажет, о чем вы просите.Что вам нужно обязательно сделать, так это включить events SP:StmtCompleted, который находится в группе хранимых процедур, и, если вы хотите, чтобы планы запросов также включали Showplan XML Statistics Profile, который находится в группе Performance.Последний XML-план содержит графическое описание и показывает фактические строки, обработанные на каждом шаге плана.

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

HTH Энди

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