Estou usando o SQL Server 2008 R2 que bloqueia automaticamente os itens do banco de dados com base em minhas consultas.
Às vezes, isso trava - dois threads com consultas diferentes nunca terminam.
Existe alguma maneira de depurar como o SQL Server bloqueia e desbloqueia recursos? Eu tentei o SQL Trace, mas não há informações sobre bloqueios de recursos.
"Às vezes, isso trava - dois threads com consultas diferentes nunca terminam"
O que você está enfrentando é um bloqueio, não um impasse. Quando ocorre uma condição de impasse, o SQL Server a detecta automaticamente, escolhe uma das consultas como vítima e lança o erro 1205.
Se você realmente estiver tendo erros de bloqueio, ative o sinalizador de rastreamento 1222. Ele registrará os erros de bloqueio no log do servidor SQL.
Se você estiver enfrentando bloqueios, configure o "limite do processo de bloqueio" ( http://msdn.microsoft.com/en-us/library/ms181150(v=SQL.90).aspx )
Consulte também http://www.mssqltips.com/sqlservertip/2429/how-to-identify-blocking-in-sql-server-2005-and-2008/
Você deve conseguir vê-los com o SQL Profiler.
Consulte este link http://msdn.microsoft.com/en-us/library/ms178104(v=sql.105).aspx
Além disso, se você suspeitar que uma consulta causa seu impasse, tente adicionar a cláusula "WITH NO LOCK". Mas não deve ser uma solução permanente.
Por fim, você deve fazer as diferentes consultas e ver por que elas causam um bloqueio. Talvez eles possam ser escritos de uma maneira diferente? Ou otimizado? Ou talvez a estrutura do banco de dados esteja em causa?