运行持续时间sysjobs-sysjobshistory

时间:2018-12-19 10:53:34

标签: sql-server tsql sql-server-2008-r2

我对sysjobs的run_duration有疑问。官方文档似乎自相矛盾:

https://docs.microsoft.com/en-us/sql/relational-databases/system-tables/dbo-sysjobhistory-transact-sql?view=sql-server-2017

首先指定:

run_duration    int Elapsed time in the execution of the job or step in HHMMSS format.

但是随后它还提到了查询更友好的时间格式:

SELECT sj.name,
       sh.run_date,
       sh.step_name,
       STUFF(STUFF(RIGHT(REPLICATE('0', 6) +  CAST(sh.run_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':') 'run_time',
       STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') 'run_duration (DD:HH:MM:SS)  '
FROM msdb.dbo.sysjobs sj
JOIN msdb.dbo.sysjobhistory sh
ON sj.job_id = sh.job_id

请注意,两者之间的差异是突然出现的。

在我的现实生活中,我遇到了一项工作时间非常长的工作。结果如下:

run_duration (DD:HH:MM:SS)  run_duration
01:49:39:39                 1493939

那我该怎么读呢?这实际上是149小时39分39秒吗?

一天零四十九没有意义。

非常感谢您的反馈!

1 个答案:

答案 0 :(得分:2)

通常,如果您使用带符号的时间,则最大分母不受限制;因为您一天24小时会停24小时。因此,在HHMMSS格式中,HH可以是0+以上的任何值。 HH不限于24,因为您没有使用天分母。就像您要计算的月份一样,即使两个日期之间的差值为16个月,也不会停止为12。您以月为单位进行计数,那么为什么要跨越一年的差距会阻止您。

就像您评论1天49小时一样,这毫无意义。 1493939的阅读时间为149小时39分39秒。