Мониторинг и статус длительных работ с Stored procedure
Быстрый ответ
Для того чтобы провести быструю проверку статуса задачи в SQL Server, воспользуйтесь запросом к системной таблице msdb.dbo.sysjobhistory. Статус выполнения отображается в колонке run_status
, где значение 0
сигнализирует о неудаче, а 1
— об успешном выполнении. Пример ниже:
SELECT j.name,
CASE h.run_status
WHEN 0 THEN 'Неудача'
WHEN 1 THEN 'Успешно'
ELSE 'Неопределённо'
END AS Статус
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE h.step_id = 0 -- Представление общего статуса задачи
ORDER BY h.instance_id DESC; -- Приоритет последних записей
Данный запрос вернёт последние статусы всех задач, отсортированные по убыванию идентификатора инстанции instance_id
.
Более подробно: Продвинутые методы определения статуса задач
Анализ активных задач и сессий
Если вам необходима информация о текущей активности задачи, используйте системные таблицы sysjobactivity и syssession, объединив их с sysjobs_view:
SELECT sj.name,
sja.run_requested_date,
sja.stop_execution_date,
DATEDIFF(SECOND, sja.run_requested_date, GETDATE()) AS 'Прошедшее время в секундах'
FROM msdb.dbo.sysjobs_view sj
JOIN msdb.dbo.sysjobactivity sja ON sj.job_id = sja.job_id
JOIN msdb.dbo.syssessions ss ON sja.session_id = ss.session_id
WHERE sja.run_requested_date IS NOT NULL
AND sja.stop_execution_date IS NULL
AND ss.agent_start_date <= sja.run_requested_date
ORDER BY 'Прошедшее время в секундах' DESC;
Этот запрос покажет активные задачи и время, прошедшее с момента их запуска, со сортировкой от наиболее длительного до наименее.
Исторический обзор результатов выполнения
Если вам интересна история выполнения задач, обратитесь к msdb.dbo.sysjobhistory:
SELECT
sj.name,
sjh.run_date,
sjh.run_time,
sjh.message
FROM msdb.dbo.sysjobs sj
JOIN msdb.dbo.sysjobhistory sjh ON sj.job_id = sjh.job_id
WHERE sjh.step_id = 0 AND sjh.run_status = 0 -- Журнал неудачных попыток выполнения!
ORDER BY sjh.run_date DESC, sjh.run_time DESC;
Этот запрос выдаст журнал неудачных попыток выполнения задач, сопровождающий временными метками и описаниями ошибок.
Мониторинг текущего состояния задач
Для того чтобы увидеть текущую активность, воспользуйтесь процедурой sp_help_job
:
EXEC msdb.dbo.sp_help_job @execution_status = 1; -- Текущие активные задачи
После выполнения этой команды вы сразу получите информацию об активных задачах.
Визуализация
| ID задачи | Статус последнего запуска | Время следующего запуска |
| ---------- | ------------------------- | ------------------------ |
| 1 | ✈️ (По расписанию) | 18:00 |
| 2 | 🛬 (Завершено) | Не запланировано |
| 3 | 🛫 (Выполняется) | 19:45 |
| 4 | ⚠️ (Задержка) | Уточняется |
- ✈️ Запуск по расписанию: Задача выполняется согласно расписанию.
- 🛬 Завершено: Задача успешно выполнена.
- 🛫 Выполнение в процессе: Задача в настоящее время активна и находится в процессе выполнения.
- ⚠️ Проблемы или ожидание: С задачей возникли проблемы, или она ожидает нового запуска.
Внимание к деталям: Глубокий анализ и предотвращение
Заглядывая под капот: Знакомство с системными таблицами
Понимание системных таблиц SQL Server, отвечающих за работу задач, – это ключ к осознанию внутренних процессов:
sysjobs
: Описание всех задач.sysjobactivity
: Текущая и прошлая активность задач.sysjobhistory
: Детальное описание результатов выполнения задач.sysjobsteps
: Описание отдельных шагов, связанных с каждой задачей.sysjobservers
: Информация о задействованных серверах.
Предотвращение ложных тревог
Обратите внимание на отбор данных текущей сессии с использованием условия:
WHERE ss.session_id = (SELECT MAX(session_id) FROM msdb.dbo.syssessions)
Контроль над выполняющимися задачами
Для отслеживания используйте процедуру sp_help_jobactivity
:
EXEC msdb.dbo.sp_help_jobactivity;
Оценка времени выполнения задач
Определение продолжительности выполнения задач важно для оценки производительности. С этим поможет справиться DATEDIFF
:
SELECT DATEDIFF(SECOND, run_requested_date, GETDATE()) FROM msdb.dbo.sysjobactivity;
Полезные материалы
- SQL Server Agent | Microsoft Learn – Обширная информация о управлении задачами SQL Server Agent.
- Querying SQL Server Agent Job Information – Пошаговое руководство по выполнению запросов к информации и статусам задач.
- Как проверить статус задачи SQL Server Agent – Stack Overflow – Методы проверки статусов задач, предложенные сообществом.
- Как использовать T-SQL для проверки статуса задачи на SQL Server – Database Journal – Полезная статья с примерами T-SQL запросов для определения статуса задачи.