सबसे पहले, मैं अपने SQL 2000 कोड की समीक्षा करूंगा और इस गतिरोध की तह तक पहुंचूंगा कि यह गतिरोध क्यों हो रहा है। इसे ठीक करना एक बड़ी समस्या को छुपा सकता है (उदाहरण के लिए अनुपलब्ध अनुक्रमणिका या खराब क्वेरी)।
दूसरा, मैं डेडलॉकिंग स्टेटमेंट की पुष्टि करने के लिए अपने आर्किटेक्चर की समीक्षा करूंगा कि वास्तव में इसे अक्सर कॉल करने की आवश्यकता होती है (क्या select count(*) from bob
एक सेकंड में 100 बार कॉल करना होगा?)
हालाँकि, यदि आपको वास्तव में कुछ गतिरोध समर्थन की आवश्यकता है और आपके SQL या आर्किटेक्चर में कोई त्रुटि नहीं है, तो निम्न पंक्तियों के साथ कुछ करने का प्रयास करें। (नोट:मुझे इस तकनीक का उपयोग प्रति सेकंड हजारों प्रश्नों का समर्थन करने वाले सिस्टम के लिए करना पड़ा है और शायद ही कभी गतिरोध मारा जाएगा)
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;
}
}