Das cerca de 50 instâncias que gerencio atualmente, tenho duas que têm um deadlock quase todas as noites envolvendo "INSERT INTO msdb.dbo.sysjobhistory" (sempre a vítima) e "DELETE FROM msdb.dbo.sysjobhistory" chamado por "EXEC msdb.dbo.sp_purge_jobhistory", ambas as sessões executadas pela conta de serviço do SQL Server Agent. Eu nunca tive esse impasse em nenhuma das outras instâncias, nem em nenhum trabalho anterior. Em cada um desses servidores, os deadlocks ocorrem em horários diferentes durante a noite (1:30 sábados executados por um agendamento semanal para sp_purge_jobhistory ou 2:01 executados por uma etapa no agendamento noturno para syspolicy_purge_history).
Não parece haver nada significativamente diferente entre essas duas instâncias de "problema" e qualquer uma das outras. Um é um servidor de teste 2012 SP3 CU3 e o outro é uma instância de produção 2012 SP2.
Alguma ideia de como posso evitar isso?
Eu escrevi isso (uma versão muito simplificada do código na postagem do blog do @Taiob que ele vinculou) e, em seguida, chamei-o de um trabalho em vez do sp_purge_jobhistory fornecido pela Microsoft:
Isso nos reduziu de ter mais de 1 milhão de linhas no msdb.dbo.sysjobhistory para apenas cerca de 1/4 disso, e as exclusões não estão mais envolvidas em deadlocks.
Obrigado a @Taiob e @ScottHodgin por suas contribuições!