Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere una gestione efficiente del deadlock di SQL Server in C# con ADO?

Innanzitutto, rivedrei il mio codice SQL 2000 e andrei in fondo al motivo per cui si sta verificando questo deadlock. Risolvere questo problema potrebbe nascondere un problema più grande (ad es. indice mancante o query errata).

In secondo luogo, esaminerei la mia architettura per confermare che l'istruzione deadlocking deve davvero essere chiamata così frequentemente (select count(*) from bob bisogna chiamare 100 volte al secondo?).

Tuttavia, se hai davvero bisogno di un supporto per deadlock e non hai errori nel tuo SQL o architettura, prova qualcosa lungo le seguenti linee. (Nota:ho dovuto usare questa tecnica per un sistema che supporta migliaia di query al secondo e raggiungeva i deadlock abbastanza raramente)

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;
  }
}