Как мне зарегистрировать частоту и время последнего использования хранимой процедуры?

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

Я думаю о добавлении вызовов в начало каждой хранимой процедуры в базе данных для вставки / обновления таблицы со следующей схемой:

SprocName    ExecCount   LastExec
----------------------------------
GetCompany   434         2009-03-02
ExportDist   2           2008-01-05

Очевидно, что добавление кода в каждый sproc не совсем продуктивно.

Есть ли встроенная функция SQL Server 2005, которая может помочь?

Или есть лучший способ?

5 ответов

Решение

Здесь есть блог MSDN, в котором рассказывается о различных вариантах. Для SQL 2005 это сводится к:

  • Выполните трассировку на стороне сервера, помните, что это не легкий вариант
  • Измените ваши хранимые процедуры, чтобы включить ведение журнала выполнения

Вы можете проверить содержимое таблицы sys.dm_exec_query_stats.

Вот сообщение в блоге о чем-то похожем: http://blog.sqlauthority.com/2008/03/22/sql-server-2005-find-highest-most-used-stored-procedure/

Я нашел ветку на форуме, в которой говорится об использовании объектов sys.syscacheobjects?!?

Самый точный метод для достижения вашей цели - это использование настраиваемого решения для ведения журнала, встроенного в ваши хранимые процедуры.

Вы можете использовать динамические административные представления SQL Server (DMV), как и другие, чтобы получить общее представление о запросах / хранимых процедурах, которые выполняются на вашем сервере, однако реальная цель этих DMV состоит в том, чтобы дать представление о настройка производительности, а не для обеспечения аудита.

Например: Как определить наиболее дорогостоящие запросы SQL Server с использованием DMV

Данные, предоставленные соответствующими DMV (sys.dm_exec_query_stats и т. Д.), Содержат только подробные сведения о планах запросов, которые в настоящее время хранятся в кэше планов SQL Server, и, следовательно, могут предоставлять только ограниченную перспективу работы сервера.

Электронная документация по SQL Server: sys.dm_exec_query_stats

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

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

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