@SolomonRutzky прав.
SQL Profiler Trace является единственным способом ( без редактирования Sproc ).
Редактировать свой Sproc:
Однако следующая лучшая вещь - это немного отредактировать рассматриваемый Sproc.
Объявите переменную DateTime в начале текущего времени.
В конце Sproc запишите значения Sproc_StartTime, Sproc_EndTime и Parameter в таблицу.
Вы могли бы даже добавить некоторую условную логику, чтобы использовать DateDiff () только для регистрации, когда при обработке Sproc использовалось расширенное количество времени.
Это может ускорить работу вашего Sproc и уменьшить потребление пространства в вашем журнальном столе, когда Sproc работает наверху.
Затем у вас есть файл журнала, который вы можете запрашивать и анализировать в течение нескольких месяцев (без трассировки в Prod).
Когда вы закончите настройку Sproc, просто удалите несколько строк логики Timer и Logger, которые вы добавили.
Значения параметров кэшированного плана:
Следует отметить, что включение значений параметров текущего кэшированного плана в таблицу журналов может помочь вам определить, не усугубляют ли они проблему производительности .
Я использую, OPTIMIZE FOR
чтобы установить, как обрабатывать параметры в моем Sproc, когда я знаю, что он будет использоваться для разрезания и нарезания данных.
Я считаю, что использование OPTIMIZE FOR
дает последовательные и быстрые результаты при использовании того же Sproc с параметрами, что и дополнительные фильтры .
Это определенно меньше переменной, чтобы рассмотреть, если вы укажите, как обрабатывать их.
Ниже приведен пример того, что вы можете добавить в нижней части вашего оператора выбора:
OPTION(OPTIMIZE FOR (@SiteID = 'ABC',
@LocationID = NULL, @DepartmentID = NULL,
@EmployeeID = NULL, @CustomerID = NULL,
@ProductID = NULL, @OrderID = NULL, @OrderStatusID = NULL,
@IncludedCancelledOrders = 1,
@StartDate UNKNOWN, @EndDate UNKNOWN))