fbpx

O dia em que o SQL Agent parou de gravar no histórico

Neste artigo técnico, o dataholic Fábio Ramos aborda sobre o caso em que o SQL Agent parou de gravar no histórico e mostra como encontrou a solução. Vem aprender com ele! 

 

Olá, pessoal! Neste artigo vou mostrar um caso real que aconteceu envolvendo o SQL Agent.

Resumo do caso:

Cliente ao consultar o histórico de um Job, evidenciou que o mesmo não estava no histórico de execução.
O último registro que tinha era de meses atrás.
A duração desse último registro é que estava sendo executado há muito tempo.

Simulei no meu ambiente o mesmo cenário.

Job com 3 steps:

Percebam que antes do “problema” (em verde), o histórico estava sendo gravado sem problemas.
Porém, ficou congelado ali no Step2 como In Progress e a duração só aumentando:

 

Executei um Refresh, e a duração saiu de 6 minutos para 11:

 

Início do troubleshooting, como pode um waitfor delay de 5 segundos estar ainda em execução?

WhoIsActive? Nada.

 

Vamos filtrar na sys.sysprocess, vai que… Para isso, executei a query abaixo para pegar o hexadecimal, para que eu possa filtrar pelo “Program Name” do job:

Nada também:

 

Tá, e se eu executar o job? Se ele de fato estiver em execução, tomarei um erro…

Job executado com sucesso:

 

Consultando o histórico novamente, nada mudou, não gravou o histórico e a duração continua acumulando:

 

 

Será que meu Agent está expurgando esses dados? Também não está limitado…

 

 

E se reiniciar o Agent? Vamos lá…

 

Mesmo cenário:

 

 

Quase sem opções, decidi ligar o Profiler e rastrear o Job.

Eis que encontro o erro “Arithmetic overflow error converting IDENTITY do data type int”:

Peguei o trecho e executei na mão:

Vamos abrir essa procedure e ver o que tem na linha 125:

Consultando a estrutura da tabela, temos um identity pela coluna instance_id, que é um INT:

Verificando o valor atual desde IDENTITY:

Pois é, chegou ao seu limite…
Lembrando que os Jobs internos de expurgo de Job History do SQL Server, utilizam DELETE, com isso o valor do identity segue a vida incrementando.

Após isso, foi feito o recycle do IDENTITY na tabela:

Realizei a limpeza também do histórico deste Job, para que não continue com aquela sujeira de estar executando há muito tempo:

Histórico gravando novamente:

Caso você queira simular este problema, basta durante a execução de algum Job aumentar o IDENTITY da sysjobhistory para o limite do INT:

Espero que tenham gostado e que eu tenha agregado um pouco de conhecimento à vocês.
Até a próxima!

Compartilhar no facebook
Compartilhar no twitter
Compartilhar no linkedin
Compartilhar no whatsapp
Compartilhar no email

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Posts recentes

Gráfico de Linha Dinâmico

Artigo por: Rafael Barbosa Vou mostrar como fazer um gráfico de linha com medidas dinâmicas e que alteram o tipo de dado sem precisar utilizar indicadores

Leia mais »