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