使用T-SQL找出执行时间过长的做业

    有些时候,有些做业遇到问题执行时间过长,所以我写了一个脚本能够根据历史记录,找出执行时间过长的做业,在监控中就能够及时发现这些做业并尽早解决,代码以下:app

 

SELECT sj.name
   , sja.start_execution_date,DATEDIFF (SECOND ,sja.start_execution_date,GETDATE() ) AS ExecutedMin,ja.AvgRuntimeOnSucceed
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id INNER
join
(
    SELECT job_id,
    AVG
    ((run_duration/10000 * 3600) + ((run_duration%10000)/100*60) + (run_duration%10000)%100)
    +
    NULLIF(0,STDEV
    ((run_duration/10000 * 3600) + ((run_duration%10000)/100*60) + (run_duration%10000)%100)) AS 'AvgRuntimeOnSucceed'
     FROM msdb.dbo.sysjobhistory
    WHERE step_id = 0 AND run_status = 1
    GROUP BY job_id) ja 
    ON sj.job_id = ja.job_id
WHERE sja.start_execution_date IS NOT NULL --做业有开始
   AND sja.stop_execution_date IS NULL --做业没结束
   AND sja.start_execution_date>DATEADD(DAY,-2,GETDATE()) --做业2天内开始
  -- AND DATEDIFF (SECOND ,sja.start_execution_date,GETDATE() )>ja.AvgRuntimeOnSucceed *1.5 --做业执行时间比历史平均时间超了50%"

 

    若是做业常常出现问题,可使用该脚本监控尽早发现问题。spa

相关文章
相关标签/搜索