Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como obter uma manipulação eficiente de deadlock do Sql Server em C # com ADO?


Primeiro, eu revisaria meu código SQL 2000 e entenderia por que esse impasse está acontecendo. Corrigir isso pode estar escondendo um problema maior (por exemplo, índice ausente ou consulta incorreta).

Em segundo lugar, eu revisaria minha arquitetura para confirmar que a instrução de deadlock realmente precisa ser chamada com frequência (select count(*) from bob tem que ser chamado 100 vezes por segundo?).

No entanto, se você realmente precisar de algum suporte a deadlock e não tiver erros em seu SQL ou arquitetura, tente algo ao longo das linhas a seguir. (Nota:eu tive que usar essa técnica para um sistema que suporta milhares de consultas por segundo e raramente atingia deadlocks)
int retryCount = 3;
bool success = false;  
while (retryCount > 0 && !success) 
{
  try
  {
     // your sql here
     success = true; 
  } 
  catch (SqlException exception)
  {
     if (exception.Number != 1205)
     {
       // a sql exception that is not a deadlock 
       throw; 
     }
     // Add delay here if you wish. 
     retryCount--; 
     if (retryCount == 0) throw;
  }
}