计算执行过程的次数

时间:2015-02-07 18:39:41

标签: sql-server stored-procedures ssms

要求:

计算程序执行的次数

据我所知,到目前为止,sys.dm_exec_procedure_stats可用于近似计数,但这只是自上次服务重启以来。我发现这个link on this website是相关的,但我需要数量才能准确,并且在服务重启后不应该刷新。

请问我能指点一下吗?

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

3 个答案:

答案 0 :(得分:1)

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

也许添加一个datetime列以收集有关执行的更多信息。以及执行等用户的专栏。

答案 1 :(得分:1)

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

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

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

declare @CallCount int

select @CallCount = NEXT VALUE FOR ProcXXXCounter

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

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

答案 2 :(得分:1)

通过使用扩展事件,可以轻松地在没有Enterprise Edition的情况下完成此操作。 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

要使用该值,请查询直方图目标(在审阅目标输出示例下)。