Задание агента SQL: определите, как долго оно выполнялось.

Сценарий

Существуют определенные задания агента SQL, выполнение которых запланировано каждые несколько минут в течение дня.

Есть законные случаи, когда он пропустит свое следующее расписание, потому что оно все еще работает по предыдущему расписанию.

Время от времени задание может «зависнуть». Это не приводит к сбою (поскольку задание еще не остановлено). В этом случае задание можно остановить вручную, и оно будет нормально работать при следующем запуске. Он предназначен для того, чтобы продолжить с того места, на котором он остановился.

Какой самый эффективный способ...?

Мне нужен способ определить, как долго (в секундах) выполняется задание агента SQL с именем «JobX». Если он в данный момент не запущен, мы можем просто вернуть ноль.

Таким образом, я могу остановить задание, если оно выполнялось в течение времени, превышающего определенный порог.

Я предполагаю, что можно было бы использовать комбинацию xp_sqlagent_enum_jobs и sysjobhistory, но мне любопытно, есть ли лучшие решения... и, надеюсь, вы сможете извлечь выгоду из препятствий, с которыми остальные уже столкнулись и обошли.

10
задан Kevin Fairchild 23 May 2012 в 19:30
поделиться