sql-servert-sqlsql-server-2000

SQL Scheduled job query, duration of last runs?


Previously used this SQL Agent Jobs, how to document to get information about all SQL Scheduled jobs.

How can I find out the duration of the last run for each job? I need seconds, minutes, and hours (hopefully not, but I'm afraid).

Can anyone give some insight into how I could query this?


Solution

  • Assuming you're not going to have any jobs that run longer than 999 hours, this should give you a good starting point:

    SELECT
        j.name,
        h.run_status,
        durationHHMMSS = STUFF(STUFF(REPLACE(STR(h.run_duration,7,0),
            ' ','0'),4,0,':'),7,0,':'),
        [start_date] = CONVERT(DATETIME, RTRIM(run_date) + ' '
            + STUFF(STUFF(REPLACE(STR(RTRIM(h.run_time),6,0),
            ' ','0'),3,0,':'),6,0,':'))
    FROM
        msdb.dbo.sysjobs AS j
    INNER JOIN
        (
            SELECT job_id, instance_id = MAX(instance_id)
                FROM msdb.dbo.sysjobhistory
                GROUP BY job_id
        ) AS l
        ON j.job_id = l.job_id
    INNER JOIN
        msdb.dbo.sysjobhistory AS h
        ON h.job_id = l.job_id
        AND h.instance_id = l.instance_id
    ORDER BY
        CONVERT(INT, h.run_duration) DESC,
        [start_date] DESC;