Sou um DBA acidental e ainda estou aprendendo.
Quando vejo no DMV:s ou no Activity Monitor que algum processo está bloqueando outro processo, o que devo fazer?
Devo simplesmente matar esses processos ou existe uma maneira de "liberar" ou talvez impedir preventivamente esse bloqueio?
Apesar desta pergunta já ter sido respondida e a resposta aceita, vou tentar defender a abordagem contrária...
NUNCA MATE CEGAMENTE UM SPID
A menos que você saiba o trabalho que o SPID fez, você não tem nenhuma compreensão da escala da reversão que está prestes a iniciar.
O pior tipo de cadeia de bloqueio são aquelas que inesperadamente colocaram seu sistema 24 horas por dia de joelhos. 99% das vezes, a consulta no início dessa cadeia de bloqueio será uma consulta de seleção simples e antiga que deu errado, enfileirando toda e qualquer atividade de gravação por trás dela. Nessas circunstâncias, um KILL salvará o dia.
Nos outros 1% do tempo, essa consulta não autorizada será a última etapa em uma transação de longa duração que levará tanto tempo para reverter quanto para chegar ao estágio em que está agora. Reservar um momento para entender como você chegou aqui será desnecessário em 99% das vezes. 1% do tempo, você pode economizar minutos/horas/dias de inatividade.
MATAR
Às vezes, a ultraviolência é a resposta
De qualquer forma, um bloqueio é apenas um bloqueio que dura muito tempo. "Muito longo" é variável, é claro. se você vir o bloqueio via sysprocesses ou DMVs, quase sempre é "muito longo", pois os bloqueios devem ser transitórios e muito curtos
Se você tiver bloqueio mensurável, precisará investigar por que, por exemplo, transação de longa duração
Bloquear, por si só, não é ruim .
O problema surge quando você tem problemas de desempenho de transações de execução longa que estão bloqueando outras transações.
Nesse caso, o que eu faria é tentar identificar quaisquer consultas/transações de execução longa e tentar corrigir esses problemas.
Se você estiver tendo problemas de desempenho, tente corrigir a causa raiz, não o sintoma.
Dito isto, se você está tendo um problema na produção e precisa absolutamente interrompê-lo, use a rotina KILL. (como gbn mencionado).
O travamento é normal. Isso acontece o tempo todo com conflitos. É o impasse constante que é um problema, já que o mecanismo de banco de dados escolhe um processo vítima para matar e reverter a transação. As estatísticas provam que isso está prestes a acontecer, mas se estiver acontecendo constantemente, você precisará detalhar as causas e reescrever as consultas e a lógica do código.