Usuário com melhor resposta
Monitorar JOB em execução

Pergunta
-
Tenho problemas que alguns jobs ficam rodando infinitamente ou alguns que deveriam rodar em 10 minutos por exemplo, demoram 60. Como faço para criar um alert para isto. Já tem um que me notifica quando acontece erro. Mas no caso de demora não consegui achar nada. Desde já agradeço a ajuda. Anderson.
- Movido Gustavo Maia Aguiar quinta-feira, 17 de setembro de 2009 21:24 (De:SQL Server - Desenvolvimento Geral)
Respostas
-
Andreson,
você pode fazer duas coisas
1 - Criar output detalhado do job. Para todos jobs que crio, configuro log do job exatamente para ter controle sobre tempo e erros de execução. Esta eu acho a melhor opção.
2 - Fazer consulta periódica na sysprocesses para verificar o que está rodando e por quanto tempo. Ex
SELECT last_batch,
d.name ,
p.status,
cmd,
program_name,
hostname,
loginame,
lastwaittype
FROM master..sysprocesses p INNER JOIN master..sysdatabases d
ON p.dbid = d.dbid
a coluna last_batch vai te indicar quando foi enviado o último comando para o servidor e lastwaittype o tipo de espera gerado. Status tb é importante para saber se algo realmente está rodando.
Espero ter ajudado.
Alex- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 14 de janeiro de 2020 17:40
-
Anderson, para testar os jobs do sql server que estão rodando a mais de um determinado periodo de tempo pode utilizar o select abaixo, então pode criar outro job rodando de tempos em tempos enviando para seu e-mail o resultado dele.
SELECTname JOB, start_execution_date Inicio, datediff("mi",start_execution_date, getdate()) [Minutos Rodando]
FROM
(msdb.dbo.sysjobactivity ja LEFT JOIN msdb.dbo.sysjobhistory jh ON ja.job_history_id = jh.instance_id)
join msdb.dbo.sysjobs_view j on ja.job_id = j.job_id
WHERE
ja
.session_id in (SELECT TOP(1) session_id FROM msdb..syssessions ORDER by agent_start_date DESC) and run_requested_date is not null and stop_execution_date is null
and
datediff("mi",start_execution_date, getdate()) > 60
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 14 de janeiro de 2020 17:40
Todas as Respostas
-
Andreson,
você pode fazer duas coisas
1 - Criar output detalhado do job. Para todos jobs que crio, configuro log do job exatamente para ter controle sobre tempo e erros de execução. Esta eu acho a melhor opção.
2 - Fazer consulta periódica na sysprocesses para verificar o que está rodando e por quanto tempo. Ex
SELECT last_batch,
d.name ,
p.status,
cmd,
program_name,
hostname,
loginame,
lastwaittype
FROM master..sysprocesses p INNER JOIN master..sysdatabases d
ON p.dbid = d.dbid
a coluna last_batch vai te indicar quando foi enviado o último comando para o servidor e lastwaittype o tipo de espera gerado. Status tb é importante para saber se algo realmente está rodando.
Espero ter ajudado.
Alex- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 14 de janeiro de 2020 17:40
-
Anderson, para testar os jobs do sql server que estão rodando a mais de um determinado periodo de tempo pode utilizar o select abaixo, então pode criar outro job rodando de tempos em tempos enviando para seu e-mail o resultado dele.
SELECTname JOB, start_execution_date Inicio, datediff("mi",start_execution_date, getdate()) [Minutos Rodando]
FROM
(msdb.dbo.sysjobactivity ja LEFT JOIN msdb.dbo.sysjobhistory jh ON ja.job_history_id = jh.instance_id)
join msdb.dbo.sysjobs_view j on ja.job_id = j.job_id
WHERE
ja
.session_id in (SELECT TOP(1) session_id FROM msdb..syssessions ORDER by agent_start_date DESC) and run_requested_date is not null and stop_execution_date is null
and
datediff("mi",start_execution_date, getdate()) > 60
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 14 de janeiro de 2020 17:40
-