Overview
Όλοι χρησιμοποιούμε το SQL Agent με σκοπό να προγραμματίσουμε διάφορες εργασίες που θέλουμε να εκτελούνται στο instance μας. Αυτό όμως που πρέπει να προσέξουμε είναι το πότε χρονικά θα βάλουμε κάθε μια να εκτελείται καθώς είναι σύνηθες φαινόμενο όλες να ξεκινάνε την ίδια ώρα. Δυστυχώς δεν υπάρχει κάποιο UI που να βοηθάει σε αυτό και για αυτό σας δίνω μια εκδοχή αυτού που χρησιμοποιώ για να μπορώ να έχω μια καλύτερη εικόνα των jobs και του προγραμματισμού τους.
My simple approach
Αυτό που κάνω είναι απλά να διαβάζω το ιστορικό των εκτελέσεων των job για τις τελευταίες 30 ημέρες με το παρακάτω query και επειδή θέλω να έχω ένα καλύτερο οπτικό αποτέλεσμα έχω φτιάξει και ένα απλό SSRS report το οποίο μπορείτε να κάνετε download και απλά να το βάλετε στα SSMS Reports ακολουθώντας τις οδηγίες που υπάρχουν στο readme.txt που θα βρείτε στο downloaded file.
Το τελικό αποτέλεσμα είναι απλό αλλά βοηθάει στο να καταλάβουμε τον προγραμματισμό των εργασιών μας.
SQL Script
SELECT
j.name as job_name
, msdb.dbo.agent_datetime(h.run_date,h.run_time) as run_start_date_time
, DATEADD( SECOND
,DATEDIFF(
SECOND
,'19000101'
,CAST(msdb.dbo.agent_datetime('19000101',
RIGHT('000000'+cast (h.run_duration as varchar),6)) as time(0)))
,msdb.dbo.agent_datetime(h.run_date,h.run_time)) as run_end_date_time
, DATEDIFF(SECOND,'19000101',CAST(msdb.dbo.agent_datetime('19000101', RIGHT('000000'+cast (h.run_duration as varchar),6)) as time(0))) as duration_sec
FROM
msdb.dbo.sysjobhistory as h
INNER JOIN
msdb.dbo.sysjobs as j on j.job_id = h.job_id
WHERE
h.run_date >= CONVERT(int,CONVERT(char(8),DATEADD(DAY,-30,GETDATE()),112))
AND h.run_status = 1
AND h.step_id = 0
ORDER BY
run_start_date_time DESC
Summary
Με την εικόνα αυτή στα χέρια πλέον είμαι σε θέση να επιλέγω καλύτερα το προγραμματισμό των job αποφεύγοντας να την εκτέλεση τους την ίδια ώρα