Estou encontrando o cenário de impasse abaixo. Consulte as definições de objeto e planos de execução em anexo. Os planos foram retirados do cache de um sistema em que esse impasse ocorre.
Entendo o que todos esses dados estão me dizendo, mas o que estou confuso é por que o procedimento armazenado spUpdateUserAccount está obtendo um bloqueio S em IX_Person_TaxPreparer_rowCreated. Esse bloqueio parece desnecessário e não há referência a IX_Person_TaxPreparer_rowCreated no plano de execução para spUpdateUserAccount.
...
Vou repassar minha resposta no twitter aqui:
Com base no XML de impasse que você postou, que lista um trancount de 3 na sessão que invoca
spUpdateUserAccount
, uma instrução ou lote anterior nessa transação provavelmente colocou o bloqueio emIX_Person_TaxPreparer_rowCreated
.Presumo que esse bloqueio seja mantido devido à restrição de chave estrangeira em vigor.
Os bloqueios são mantidos durante a transação, portanto, sua segunda instrução não pode ser concluída até que a primeira confirme a transação aberta.