Как мне зарегистрировать частоту и время последнего использования хранимой процедуры?
Я хочу знать, как часто запускается набор хранимых процедур и когда они использовались в последний раз.
Я думаю о добавлении вызовов в начало каждой хранимой процедуры в базе данных для вставки / обновления таблицы со следующей схемой:
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 и передаете их имя в качестве параметра.