Nejprve bych zkontroloval svůj kód SQL 2000 a dostal se na dno, proč k tomuto zablokování dochází. Oprava tohoto může skrývat větší problém (např. chybějící index nebo špatný dotaz).
Za druhé bych zkontroloval svou architekturu, abych potvrdil, že příkaz k zablokování je skutečně potřeba volat tak často (select count(*) from bob
musí být voláno 100krát za sekundu?).
Pokud však opravdu potřebujete podporu uvíznutí a nemáte žádné chyby ve svém SQL nebo architektuře, zkuste něco v následujících řádcích. (Poznámka:Tuto techniku jsem musel použít pro systém podporující tisíce dotazů za sekundu a uvízl jsem jen zřídka)
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;
}
}