Мониторинг и статус длительных работ с Stored procedure

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы провести быструю проверку статуса задачи в SQL Server, воспользуйтесь запросом к системной таблице msdb.dbo.sysjobhistory. Статус выполнения отображается в колонке run_status, где значение 0 сигнализирует о неудаче, а 1 — об успешном выполнении. Пример ниже:

SQL
Скопировать код
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.

Кинга Идем в IT: пошаговый план для смены профессии

Более подробно: Продвинутые методы определения статуса задач

Анализ активных задач и сессий

Если вам необходима информация о текущей активности задачи, используйте системные таблицы sysjobactivity и syssession, объединив их с sysjobs_view:

SQL
Скопировать код
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:

SQL
Скопировать код
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:

SQL
Скопировать код
EXEC msdb.dbo.sp_help_job @execution_status = 1; -- Текущие активные задачи

После выполнения этой команды вы сразу получите информацию об активных задачах.

Визуализация

Markdown
Скопировать код
| ID задачи  | Статус последнего запуска | Время следующего запуска |
| ---------- | ------------------------- | ------------------------ |
| 1          | ✈️ (По расписанию)        | 18:00                    |
| 2          | 🛬 (Завершено)             | Не запланировано          |
| 3          | 🛫 (Выполняется)           | 19:45                    |
| 4          | ⚠️ (Задержка)              | Уточняется               |
  • ✈️ Запуск по расписанию: Задача выполняется согласно расписанию.
  • 🛬 Завершено: Задача успешно выполнена.
  • 🛫 Выполнение в процессе: Задача в настоящее время активна и находится в процессе выполнения.
  • ⚠️ Проблемы или ожидание: С задачей возникли проблемы, или она ожидает нового запуска.

Внимание к деталям: Глубокий анализ и предотвращение

Заглядывая под капот: Знакомство с системными таблицами

Понимание системных таблиц SQL Server, отвечающих за работу задач, – это ключ к осознанию внутренних процессов:

  • sysjobs: Описание всех задач.
  • sysjobactivity: Текущая и прошлая активность задач.
  • sysjobhistory: Детальное описание результатов выполнения задач.
  • sysjobsteps: Описание отдельных шагов, связанных с каждой задачей.
  • sysjobservers: Информация о задействованных серверах.

Предотвращение ложных тревог

Обратите внимание на отбор данных текущей сессии с использованием условия:

SQL
Скопировать код
WHERE ss.session_id = (SELECT MAX(session_id) FROM msdb.dbo.syssessions)

Контроль над выполняющимися задачами

Для отслеживания используйте процедуру sp_help_jobactivity:

SQL
Скопировать код
EXEC msdb.dbo.sp_help_jobactivity;

Оценка времени выполнения задач

Определение продолжительности выполнения задач важно для оценки производительности. С этим поможет справиться DATEDIFF:

SQL
Скопировать код
SELECT DATEDIFF(SECOND, run_requested_date, GETDATE()) FROM msdb.dbo.sysjobactivity;

Полезные материалы

  1. SQL Server Agent | Microsoft Learn – Обширная информация о управлении задачами SQL Server Agent.
  2. Querying SQL Server Agent Job Information – Пошаговое руководство по выполнению запросов к информации и статусам задач.
  3. Как проверить статус задачи SQL Server Agent – Stack Overflow – Методы проверки статусов задач, предложенные сообществом.
  4. Как использовать T-SQL для проверки статуса задачи на SQL Server – Database Journal – Полезная статья с примерами T-SQL запросов для определения статуса задачи.