使用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

相關文章
相關標籤/搜索