计算过程执行的次数
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 可能发生的类似阻塞问题,因为序列是在事务之外处理的。
这可以通过使用扩展事件轻松完成,无需企业版。 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
要消耗值,查询直方图目标(查看目标输出示例下)。
要求:
计算程序执行的次数
据我目前的了解,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 可能发生的类似阻塞问题,因为序列是在事务之外处理的。
这可以通过使用扩展事件轻松完成,无需企业版。 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
要消耗值,查询直方图目标(查看目标输出示例下)。