Trước tiên, tôi sẽ xem lại mã SQL 2000 của mình và tìm hiểu kỹ lý do tại sao lại xảy ra tình trạng bế tắc này. Việc khắc phục điều này có thể đang che giấu một vấn đề lớn hơn (Ví dụ:thiếu chỉ mục hoặc truy vấn không hợp lệ).
Thứ hai, tôi sẽ xem xét kiến trúc của mình để xác nhận rằng câu lệnh deadlocking thực sự cần được gọi thường xuyên như vậy (Liệu select count(*) from bob
phải được gọi 100 lần một giây?).
Tuy nhiên, nếu bạn thực sự cần một số hỗ trợ deadlock và không có lỗi trong SQL hoặc kiến trúc của bạn, hãy thử làm gì đó dọc theo các dòng sau. (Lưu ý:Tôi đã phải sử dụng kỹ thuật này cho một hệ thống hỗ trợ hàng nghìn truy vấn mỗi giây và rất hiếm khi xảy ra bế tắc)
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;
}
}