TSQL Динамически определять список параметров для SP / Function - PullRequest
2 голосов
/ 24 июня 2010

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

Я могу динамически извлекать имя объекта из @@ PROCID, но я не смог определить все переданные параметры и их значения. Кто-нибудь знает, возможно ли это?

РЕДАКТИРОВАТЬ: пометить мой ответ как ответ, чтобы закрыть этот вопрос. Похоже, расширенные события являются наименее навязчивым элементом производительности, однако я не уверен, есть ли существенная разница между минимальным профилированием и расширенными событиями. Возможно, что-нибудь для дождливого дня.

Ответы [ 3 ]

2 голосов
/ 25 июня 2010

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

select * from INFORMATION_SCHEMA.PARAMETERS where 
SPECIFIC_NAME = OBJECT_NAME(@@PROCID)

И я предполагаю, что это означает, что я мог бы, с помощью надлежащим образом madcap динамического SQL, также извлечь их значения.

0 голосов
/ 26 июня 2010

Похоже, что лучшее решение в моей ситуации - это выполнить профилирование, собирая только SP: начальный и SP: завершенный, и написание некоторого TSQL для перебора данных и заполнения таблицы отслеживания.

Я лично предпочел генерацию кода для этого, но политически, где я работаю, они предпочли это решение. Мы потеряли некоторую детализацию при ведении журнала, но это достаточное решение моей проблемы.

РЕДАКТИРОВАТЬ: Это закончилось, чтобы быть ОК решения. Даже профилирование только этих двух элементов заметно снижает производительность. :( Хотелось бы, чтобы у нас был MSFT-способ для профилирования рабочей нагрузки, которая не ухудшала бы производительность. У Oracle есть хорошее решение для этого, но у него есть и свой компромисс. Мне бы хотелось, чтобы MSFT реализовал нечто подобное. Новый DMV и расширенные события помогают соотносить элементы. Еще раз спасибо за ссылку Мартин.

0 голосов
/ 24 июня 2010

Я не знаю, как сделать это на макушке, но я бы вместо этого решил провести трассировку на вашем месте.Вы можете использовать SQL Server Profiler для сбора только информации для указанных вами хранимых процедур (с использованием фильтров).Вы можете отправить вывод в таблицу, а затем запросить результаты в душе.Вывод может включать информацию ввода-вывода, какие параметры были переданы, ИД пользователя и компьютер и многое другое.

После выполнения трассировки вы можете объединить результаты в отчеты, которые будут показывать, сколько раз была вызвана процедуракакие параметры использовались и т.д ...

Вот ссылка, которая может помочь:

http://msdn.microsoft.com/en-us/library/ms187929.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...