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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
1 031
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

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

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

Kibbee 30.09.2008 19:19

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

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

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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

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

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

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

HTH Энди

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