sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo obtener un manejo eficiente de los interbloqueos del servidor Sql en C# con ADO?

Primero, revisaría mi código SQL 2000 y llegaría al fondo de por qué está ocurriendo este punto muerto. Arreglar esto puede estar ocultando un problema mayor (por ejemplo, índice faltante o consulta incorrecta).

En segundo lugar, revisaría mi arquitectura para confirmar que la declaración de interbloqueo realmente debe llamarse con tanta frecuencia (¿select count(*) from bob hay que llamar 100 veces por segundo?).

Sin embargo, si realmente necesita soporte de punto muerto y no tiene errores en su SQL o arquitectura, intente algo como lo siguiente. (Nota:tuve que usar esta técnica para un sistema que admitía miles de consultas por segundo y rara vez se bloqueaba)

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