Как определить, что в данный момент делает Job (ru-RU)
Вся информация о Job`ах хранится в системной БД msdb. Например весь их перечень находится в таблице
msdb.dbo.sysjobs
.
Ход выполнения конкретного джоба можно отслеживать через системные представления, при этом не только отслеживая, когда и под кем он был запущен, а так же кто его блокирует в данный момент и даже текущий запрос, который выполняется в этом джобе.
select j.name -- Имя задания
, r.session_id -- Идентификатор сеанса, к которому относится данный запрос
, r.start_time -- Временная метка поступления запроса
, r.status -- Состояние запроса
, r.blocking_session_id -- Идентификатор сеанса, блокирующего данный запрос
, r.wait_time -- Если запрос в настоящий момент блокирован,
-- в столбце содержится продолжительность текущего ожидания (в миллисекундах)
, r.cpu_time -- Процессорное время (в миллисекундах), затраченное на выполнение запроса
, r.total_elapsed_time -- Общее время, истекшее с момента поступления запроса (в миллисекундах)
, r.reads -- Число операций чтения, выполненных данным запросом
, r.writes -- Число операций записи, выполненных данным запросом
, r.logical_reads -- Число логических операций чтения, выполненных данным запросом
, t.text -- Текст SQL-запроса
from sys.dm_exec_requests r
inner join sys.dm_exec_sessions s
on r.session_id = s.session_id
cross apply sys.dm_exec_sql_text ( sql_handle ) t
inner join msdb.dbo.sysjobs j
on s.program_name like '%' + master.dbo.fn_varbintohexstr( j.job_id ) + '%'
where j.name = N'Имя задания'
Определить текущий статус задания через EP (Extended Stored Procedure):
declare @xp_results table ( [Job ID] uniqueidentifier
,[Last Run Date] int
,[Last Run Time] int
,[Next Run Date] int
,[Next Run Time] int
,[Next Run Schedule ID] int
,[Requested To Run] int
,[Request Source] int
,[Request Source ID] nvarchar(128)
,[Running] int
,[Current Step] int
,[Current Retry Attempt] int
,[State] int
)
insert into @xp_results
exec master.dbo.xp_sqlagent_enum_jobs 1, sa
select s.name
, state = case x.[State]
when 0 then 'Cостояние бездействия или приостановки'
when 1 then 'Выполняется'
when 2 then 'Ожидание потока'
when 3 then 'Ожидание повторной попытки'
when 4 then 'Бездействие'
when 5 then 'Приостановлен'
when 7 then 'Выполняеются завершающие действия'
end
from @xp_results x
inner join msdb.dbo.sysjobs s
on x.[Job ID] = s.job_id
where s.name = N'Имя задания'
Вариант для SQL Server 2005 и выше.