在查询 sys.dm_exec_query_stats DMV时,我在 last_worker_time 列上观察到了一些有趣的行为。
通常,它为我正在监视的特定存储过程报告0。但偶尔它会返回一个非零值,当它发生时它似乎总是976。
MSDN documentation说明了关于last_worker_time列的以下内容:
CPU时间,以微秒为单位报告(但仅精确到 毫秒),这是上次执行计划时消耗的。
然而,这并不能解释这种奇怪的行为。谁能解释为什么价值976如此多产?
我的DMV查询的以下简化版本会产生这种现象:
select
qs.last_worker_time
from
sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.plan_handle) st
where
db_name(st.dbid) = 'IntegrationManagement'
and object_name(st.objectid, st.dbid) in ('GetFromOutQueue')
SQL Server 2008 R2实例托管在VMware上运行的Windows Server 2008 R2上。
答案 0 :(得分:2)
如果测量是使用每秒1024次滴答的计时器完成的,那么你会看到这一点。通常在程序的开始和结束之间没有勾选,报告的时间是0us。有时会有一个滴答,报告的时间是1/1024秒,向下舍入到最接近的微秒= 976 us。