代码之家  ›  专栏  ›  技术社区  ›  SQL_M

运行持续时间sysjobs-sysjobshistory

  •  0
  • SQL_M  · 技术社区  · 6 年前

    我有一个关于系统作业运行时间的问题。官方文件似乎自相矛盾:

    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秒吗?

    一天49分毫无意义。

    非常感谢您的反馈!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Larnu    6 年前

    通常情况下,如果你使用的是带时间的符号,那么最大的分母就不受限制;比如说,你会在24小时内停止,因为这就是一天中有多少分母。所以,在格式上 HHMMSS , HH 可以是0+中的任何值。hh不限于24,因为您不使用天分母。就像你在数月一样,即使两个日期的差是16个月,你也不会停下来算12个月。你在数月,所以为什么跨越一年的差距会阻止你。

    就像你说的一样,一天49个小时完全没有意义。 1493939 应为149小时39分39秒。