要求:
计算程序执行的次数
据我所知,到目前为止,sys.dm_exec_procedure_stats
可用于近似计数,但这只是自上次服务重启以来。我发现这个link on this website是相关的,但我需要数量才能准确,并且在服务重启后不应该刷新。
请问我能指点一下吗?
Hack:我需要跟踪的过程有一个select语句,因此返回一些存储在名为Results
的永久表中的行。我能想到的最简单的解决方案是在Results
表中创建一个列以跟踪过程执行,在插入之前从该列中选择最大值并向其中添加一个以增加计数。这个解决方案对我来说似乎也很愚蠢,但我能想到的最好。
答案 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
这当然有一个很小的开销,但不会导致使用表时可能发生的类似阻塞问题,因为序列是在事务外处理的。
答案 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
要使用该值,请查询直方图目标(在审阅目标输出示例下)。