Analyser les temps d'exécution des jobs SQL Agent

Une tâche courante du DBA : analyser les performances des tâches planifiées SQL Agent et surveiller leur temps d'exécution au fil du temps.

Voici une requête qui vous permettra d'extraire ces informations de l'historique.

La requête :

/*-------------------------------------------------------------------
[SCRIPT] Job History Analysis
[MAJ PAR] DATAFLY - Arian Papillon
[DATEMAJ] 20131001
-------------------------------------------------------------------*/
USE msdb
GO
--CREATE VIEW jobhistory_analysis as -- si vous voulez
SELECT j.name AS job_name
, step_id
, run_datetime = CONVERT(DATETIME, RTRIM(run_date))
-- + (run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4,
, run_duration = SUBSTRING(RIGHT('000000'
+ CONVERT(VARCHAR(6), run_duration), 6),
1, 2) + ':' + SUBSTRING(RIGHT('000000'
+ CONVERT(VARCHAR(6), run_duration),
6), 3, 2) + ':'
+ SUBSTRING(RIGHT('000000' + CONVERT(VARCHAR(6), run_duration), 6), 5,
2)
, run_duration_secs = CAST(SUBSTRING(RIGHT('000000'
+ CONVERT(VARCHAR(6), run_duration),
6), 1, 2) AS INT) * 3600
+ CAST(SUBSTRING(RIGHT('000000' + CONVERT(VARCHAR(6), run_duration), 6),
3, 2) AS INT) * 60
+ CAST(SUBSTRING(RIGHT('000000' + CONVERT(VARCHAR(6), run_duration), 6),
5, 2) AS INT)
, run_duration_min = CAST((
CAST(SUBSTRING(RIGHT('000000'+ CONVERT(VARCHAR(6), run_duration),6), 1, 2) AS DECIMAL(6, 2))* 3600
+ CAST(SUBSTRING(RIGHT('000000' + CONVERT(VARCHAR(6), run_duration), 6),3, 2) AS DECIMAL(6, 2)) * 60
+ CAST(SUBSTRING(RIGHT('000000' + CONVERT(VARCHAR(6), run_duration), 6),5, 2) AS DECIMAL(6, 2))
) / 60 AS DECIMAL(10, 2))
FROM msdb..sysjobhistory h
INNER JOIN msdb..sysjobs j ON h.job_id = j.job_id
WHERE run_status = 1
--
ORDER BY job_name, step_id, run_datetime

Il ne nous reste plus qu'à coller le résultat sous Excel et faire un tableau ou graphique croisé dynamique, en filtrant les jobs et les étapes qui nous intéressent :