哪些 SQL Server 查询将设置性能计数器“最长事务运行时间”> 0

哪些 SQL Server 查询将设置性能计数器“最长事务运行时间”> 0

我正在尝试确定这个性能计数器是否值得监控:\\SERVER\MSSQL:Transactions\Longest Transaction Running Time。

因此,在测试期间我尝试创建一些长时间运行的事务,但似乎无法让该计数器读取大于零的任何值。

但我找不到可以执行此操作的事务或查询。作为起点,我使用了帮助中的示例查询(事务中的插入)数据库连接开放传输协议没有运气。

是否有影响该计数器的查询?

答案1

有点晚了。我相信文档在过去六年中已经更新以解释这个问题的答案,但根据我的测试,它并不完全正确。

联机图书:“自事务启动以来,活跃时间比任何其他当前事务都长的时间(以秒为单位)。此计数器仅显示活动当数据库处于读取已提交快照隔离级别时。如果数据库处于任何其他隔离级别,则不会记录任何活动“”。

根据我的测试,这并不完全正确。如果未启用 RCSI,但您允许快照,它将显示 SNAPSHOT 查询的最长运行事务时间。

另一件棘手的事情是计数器每 60 秒仅更新一次。

基本上,当您使用快照或 RCSI 时,它对于监控是否有东西阻止版本存储清理非常有用。

答案2

这个计数器似乎更新得有点慢/不稳定,我不完全相信它的原因确切地它的解释表明了什么,然而我似乎通过在一个开放式事务中从(一个大表)中进行选择而获得了最大的成功。

有趣的是,发出回滚似乎会导致计数器状态立即更新,提交则不那么有效,有时甚至不需要任何操作就会更新。正如我所说,我不认为这个计数器完全符合我们的想象,可能只是一个近似值/平均值。

问候,马克@retracement

答案3

这应该会给你计数器的一个值。显然你必须手动停止它。

SELECT '1' AS field1 INTO #tmp
BEGIN TRANSACTION
WHILE 1=1
BEGIN
    UPDATE #tmp SET field1=1
END
COMMIT TRANSACTION
DROP TABLE #tmp

相关内容