Estou realmente tendo problemas para rastrear alguns bloqueios que estamos enfrentando.
O status do SPID de bloqueio raiz é 'adormecido', o cmd é 'AWAITING COMMAND' e o sqltext
é SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Quando visualizo o relatório Principais transações por contagem de transações bloqueadas, a instrução SQL de bloqueio é '-'.
Eu executei um rastreamento no SQL e, quando o bloqueio acontece, rastreia o SPID de bloqueio raiz, mas ele realmente não me levou a lugar algum. A última instrução de rastreamento é a mesma que a sqltext
acima SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Eu verifiquei todos os procedimentos armazenados relacionados que posso encontrar para garantir que eles tenham instruções TRY / CATCH BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN (usamos procedimentos armazenados para tudo, para que não haja instruções independentes sendo executadas). Esse problema começou a ocorrer nas últimas 24 horas e ninguém está afirmando ter feito alterações no sistema.
Solução: um de nossos procedimentos armazenados raramente usados teve um erro com uma inserção (o número de colunas não correspondia), mas ainda estamos confusos sobre o que exatamente estava acontecendo.
Ao examinar todas as informações de rastreamento, a instrução EXEC deste procedimento armazenado foi listada às vezes, mas NUNCA pouco antes do BLOCK ocorrer no SPID de bloqueio. Parecia que, quando começou a bloquear, o rastreio não registrou a execução (ou nenhuma das instruções nele). No entanto, há outros momentos em que o rastreamento registrou sua execução e nenhum bloqueio ocorreu.
O relatório de erro do procedimento armazenado veio de um usuário e eu consegui encontrar várias instruções EXEC em rastreios e executá-las no SSMS. Em nenhum momento em que os executei, ocorreu algum bloqueio ou eles travaram. Eles foram executados conforme o esperado (o bloco catch foi acionado e revertida a transação após o erro). Depois de resolver a correção do procedimento armazenado, não vimos o problema novamente.