Eu executo o SQL Server 2012.
Tenho um trabalho de manutenção que é executado todas as noites. No final da manutenção, faço uma limpeza e chamo isso:
Begin try
Exec msdb.dbo.sysmail_delete_log_sp @logged_before = '20160613';
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = '20160613';
End try
Begin catch
-- Do some log error
End catch
Coloquei a transação em um Try/Catch, mas parece que não está funcionando. Continuo recebendo este erro:
"Erro 1205, Gravidade 13, nível 18: a transação (ID do processo 112) estava em um impasse nos recursos de bloqueio com outro processo e foi escolhida como a vítima do impasse. Execute novamente a transação."
Se eu executar a transação manualmente, ela será executada rapidamente e não haverá erros.
Alguma ideia de por que continuo recebendo esse erro ou como posso detectá-lo para que não falhe no meu trabalho?
Portanto, não tive sorte com o gráfico de impasse. Não parece aparecer nos meus logs SQL. Mas descobri que outro trabalho foi agendado para ser executado ao mesmo tempo que o meu trabalho e estava fazendo backups e enviando e-mails ao mesmo tempo em que meu trabalho estava tentando limpar o histórico de correio. Então, mudar o horário do outro trabalho resolveu meu problema!