Najpierw przejrzałbym mój kod SQL 2000 i doszedłbym do sedna przyczyny tego impasu. Naprawienie tego może ukrywać większy problem (np. brakujący indeks lub złe zapytanie).
Po drugie, chciałbym przejrzeć moją architekturę, aby potwierdzić, że instrukcja zakleszczenia naprawdę musi być często wywoływana (Czy select count(*) from bob
trzeba dzwonić 100 razy na sekundę?).
Jeśli jednak naprawdę potrzebujesz wsparcia dla zakleszczeń i nie masz błędów w swoim SQL lub architekturze, wypróbuj coś w następujący sposób. (Uwaga:musiałem użyć tej techniki w systemie obsługującym tysiące zapytań na sekundę i dość rzadko trafiałem w zakleszczenia)
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;
}
}