2013-03-08 4 views
5

मैंने एज़ूर डाटाबेस को लिखते समय घातीय बैकऑफ के साथ INSERT/UPDATE पुनः प्रयास तर्क को संभालने के लिए निम्न कोड लागू किया है।एसक्यूएल एज़ूर डाटाबेस रीट्री लॉजिक

static SqlConnection TryOpen(this SqlConnection connection) 
{ 
    int attempts = 0; 
    while (attempts < 5) 
    { 
    try 
    { 
     if (attempts > 0) 
     System.Threading.Thread.Sleep(((int)Math.Pow(3, attempts)) * 1000); 
     connection.Open(); 
     return connection; 
    } 
    catch { } 
    attempts++; 
    } 
    throw new Exception("Unable to obtain a connection to SQL Server or SQL Azure."); 
} 

हालांकि मुझे अपने डेटाबेस के पढ़ने के लिए पुनः प्रयास तर्क लागू करने पर विचार करना चाहिए? या SqlCommand.CommandTimeout() विधि पर्याप्त होगा? मेरी के अधिकांश निम्नलिखित कोड का उपयोग कर की शुरूआत कर रहे हैं पढ़ता है:

Dim myDateAdapter As New SqlDataAdapter(mySqlCommand) 
Dim ds As New DataSet 
myDateAdapter.Fill(ds, "dtName") 

यह जानना क्षणिक त्रुटियों किस तरह Azure इसलिए मैं अब जितना संभव हो उतना शमन करने के लिए कोशिश कर रहा हूँ के साथ एक उत्पादन वातावरण में हो जाएगा मुश्किल है।

उत्तर

5

मुझे लगता है कि रीट्री सामान्य रूप से आपके विंडोज़ एज़ूर एसक्यूएल डाटाबेस ऑपरेशंस का हिस्सा बनने जा रहे हैं।

कस्टम समाधान को लागू करने के बजाय, क्या आपने माइक्रोसॉफ्ट पैटर्न और प्रैक्टिस द्वारा प्रकाशित transient fault handling application block को विशेष रूप से SQL डेटाबेस के लिए देखा है?

+0

अब मैं इसे देख रहा हूं। क्या टीएफएच ब्लॉक विस्तृत जानकारी प्रदान करेगा कि कनेक्शन क्यों गिरा दिया गया है? – QFDev

4

एसक्यूएल एज़ूर में कनेक्शन विफलता आम हैं। ऐसा इसलिए है क्योंकि आपका एप्लिकेशन एक कनेक्शन पूल बनाएगा, लेकिन जब आपकी तरफ सोचती है कि ये कनेक्शन खत्म हो गए हैं, तो एज़ूर उन्हें अंत में समाप्त कर सकता है और आप इसके बारे में कभी नहीं जानते।

वे वैध कारणों के लिए ऐसा करते हैं जैसे कि एक विशेष उदाहरण ओवरलोड हो गया है और वे दूसरे को कनेक्शन स्थानांतरित कर रहे हैं। इन-हाउस एसक्यूएल सर्वरों के साथ आपको आम तौर पर यह समस्या कभी नहीं मिलती क्योंकि आपके SQL सर्वर हमेशा उपलब्ध होते हैं और आपके उपयोग के लिए समर्पित होते हैं।

उदाहरण के तौर पर, मुझे एक दिन में लगभग 100,000 डेटाबेस क्वेरी पर SQL Azure के साथ लगभग 5 कनेक्शन विफलताएं मिलती हैं।

यह एसक्यूएल एज़ूर के साथ होने वाला है। यदि आप ADO.NET का उपयोग कर रहे हैं तो क्षणिक गलती हैंडलिंग का डेविड का सुझाव जाने का तरीका है। Transient Fault Handling with SQL Azure using Entity Framework

1

मैं SqlConnection और SqlCommand विस्तार के तरीकों को लागू किया है तर्क पुन: प्रयास प्रदान:

आप इकाई की रूपरेखा का उपयोग करने जा रहे हैं, तो वहाँ अच्छी खबर है और बुरी खबर है। यह NuGet पर उपलब्ध है।

संबंधित मुद्दे