计算过程执行的次数

Count number of times a procedure is executed

要求:

计算程序执行的次数

据我目前的了解,sys.dm_exec_procedure_stats 可用于近似计数,但那只是自上次服务重启以来的计数。我发现这个 link on this website 相关,但我需要精确计数并且在服务重新启动后不应清除。

我可以就此提出一些建议吗?

Hack:我需要跟踪的过程有一个 select 语句,因此 returns 一些行存储在名为 Results 的永久 table 中。我能想到的最简单的解决方案是在 Results table 中创建一个列来跟踪过程执行, select 插入之前该列的最大值并向其添加一个增加计数。这个解决方案对我来说也很愚蠢,但这是我能想到的最好的解决方案。

即使服务已重新启动,我也能想到跟踪执行次数的唯一方法是在您的数据库中有一个 table 并在您的 table 中插入一行每次执行的过程。

也许还可以添加日期时间列以收集有关执行的更多信息。以及执行用户等的一列。

我认为您可以创建一个序列对象,假设您使用的是 SQL Server 2012 或更新版本。

CREATE SEQUENCE ProcXXXCounter
    AS int
    START WITH 1
    INCREMENT BY 1 ;

然后在过程中从中获取一个值:

declare @CallCount int

select @CallCount = NEXT VALUE FOR ProcXXXCounter

这当然有一个小的开销,但不会导致使用 table 可能发生的类似阻塞问题,因为序列是在事务之外处理的。

序列参数:https://msdn.microsoft.com/en-us/library/ff878091.aspx

这可以通过使用扩展事件轻松完成,无需企业版。 sqlserver.module_end 事件将触发,正确设置谓词并使用直方图目标。

http://sqlperformance.com/2014/06/extended-events/predicate-order-matters https://technet.microsoft.com/en-us/library/ff878023(v=sql.110).aspx

要消耗值,查询直方图目标(查看目标输出示例下)。