Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

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

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

Для того чтобы провести быструю проверку статуса задачи в 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;

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

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Исторический обзор результатов выполнения

Если вам интересна история выполнения задач, обратитесь к 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 запросов для определения статуса задачи.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой запрос используется для быстрой проверки статуса задачи в SQL Server?
1 / 5