Операторы профилирования внутри пользовательской функции

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

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

Есть ли способ (кроме разворачивания самих запросов) регистрировать таблицы, вызываемые UDF в Profiler?


person Craig Walker    schedule 12.03.2010    source источник


Ответы (1)


Вы не можете: TVF с несколькими операторами - это черный ящик, и вы можете получить только CPU, Read, Writes и т. Д.

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

Встроенная функция TVF расширяется как представление или макрос в основной запрос, и ее можно увидеть.

Изменить: связано: Табличная функция с ценным значением, где мои план запроса пойти?

person gbn    schedule 12.03.2010
comment
@ Крэйг Уокер: Их трудно устранять. Используйте их экономно. Например, все строки должны быть возвращены из TVF, даже если не все нужны, или когда в других ситуациях фильтры и т. Д. Будут применяться в более оптимальных точках запроса. - person gbn; 12.03.2010
comment
Хм ... преобразование TVF в встроенный TVF могло бы быть выполнимым. - person Craig Walker; 12.03.2010