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




Вы можете использовать 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
Еще одна целая ветка о профилировщике 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 Энди
Я запускаю профилировщик, чтобы получить общее представление о том, какие запросы выполняются, а затем копирую запросы, которые выполняются слишком медленно, в анализатор запросов, чтобы лучше рассмотреть план запроса.