DMV sys.dm_exec_requests中的total_elapsed_time是否完全不正确?


13

我正在运行SQL Server 2012,并尝试将一些查询放在一起以使用DMV进行监视。但是,当查看DMV 中的total_elapsed_time字段时sys.dm_exec_requests,数字看起来相去甚远。这是一个例子:

SELECT
  session_id, RunTime = CURRENT_TIMESTAMP,
  start_time, total_elapsed_time
FROM sys.dm_exec_requests
WHERE session_id = 284;

session_id  RunTime                 start_time              total_elapsed_time
284         2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976

根据我的计算*,经过时间应该在349,103左右,而不是1,419,976。相差四分之一。

*根据当前时间与start_time之间的差(以毫秒为单位),即
SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690');

这是服务器信息:

SELECT @@VERSION;

Microsoft SQL Server 2012 - 11.0.5592.0 (X64) 
    Apr 17 2015 15:18:46 
    Copyright (c) Microsoft Corporation
    Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

有什么想法可能导致这种差异吗?


Answers:


11

有一个错误会汇总并行操作中的时间。该问题在2014年修复。

对于批处理中的特定并行查询,total_elapsed_time将是正确的,直到它移至该批处理中的下一条语句为止,然后total_elapsed_time将由DOP爆炸。

在一个查询窗口中运行此命令:

USE AdventureWorks2012
GO
SELECT *
FROM Sales.SalesOrderDetail sod
JOIN Production.Product p ON sod.ProductID = p.ProductID
ORDER BY Style 

waitfor delay '00:00:15'

马上运行:

select 
    DATEDIFF(ms, start_time, getdate()) ActualElapsedTime,
    total_elapsed_time from sys.dm_exec_requests
where session_id = <your session_id for the above batch>

在SQL Server移至该WAITFORDELAY语句之前,这两个值将接近相同,然后您应该会看到total_elapsed_time爆炸(假设第一个查询与我的服务器具有并行的计划)。

我记得几年前为一个客户从事此工作。在内部数据库中找到了该错误(我是Microsoft Premier Developer Consultant),但没有公开引用。


7

看起来DMV也可能是错误/问题。有一个连接错误报告在这里这种相同的不准确的。建议的解决方法是使用

GETDATE() - sys.dm_exec_requests.start_time

而不是total_elapsed_time。该问题已在SQL Server 2014中解决。用“ Nathan(MSFT)”在“连接”项上引用注释:

sys.dm_exec_requests.total_elapsed_time的问题并非特定于RESTORE操作;也已经观察到它UPDATE STATISTICS。SQL Server 2008 R2中不会解决此问题。[...]该问题已在SQL Server 2014中解决。


2

我检查了几台服务器,在后台请求中观察到在两个月内漂移了约​​14秒。

但是,除此之外,我在其他请求上看到的唯一重要区别是spid进入了SLEEPING状态。我怀疑在该状态下该值不会增加;但我无法将查询强制进入睡眠状态以对其进行测试。(WAITFOR会暂停而不是睡觉)。

可能还有其他原因,但我还没有找到。您可以通过监视查询以确保它不会进入SLEEPING状态来排除这一情况。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.