मैं कुछ बैच डालने और अपडेट करने के लिए TransactionScope
का उपयोग कर रहा हूं। समस्या यह है कि, जब मैं TransactionScope
के टाइमआउट को एक घंटे में सेट करता हूं तब भी मुझे 30 मिनट लंबे ऑपरेशन पर टाइमआउट अपवाद मिल रहा है।लेनदेनस्कोप टाइमआउट समय से पहले होता है?
अपवाद के बाद भी यह बैच के रिकॉर्ड की यादृच्छिक राशि दर्ज करता है। उदाहरण के लिए अंतिम ऑपरेशन में 12440 आवेषण थे और समय-समय पर तालिका में 7673 रिकॉर्ड डाले गए थे।
SqlConnection
और SqlCommand
का समय दोनों int.MaxValue
पर सेट हैं।
मैं क्या गलत कर रहा हूं?
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromHours(1)))
{
try
{
using (db = new DB())
{
//operations here
}
}
catch (Exception ex)
{
throw new Exception("DB Error:\r\n\r\n" + ex.Message);
}
transaction.Complete();
} // <--- Exception here: Transaction aborted (Inner exception: Timeout)
एक बड़ा (और संभवतः अधिक महत्वपूर्ण) प्रश्न यह है कि "कुछ दस हजार इंसर्ट इतने लंबे समय क्यों लेते हैं?" –
यह एक * कमांड टाइमआउट * हो सकता है (और इस प्रकार एक * लेनदेनस्कोप टाइमआउट * के लिए एक लाल हेरिंग हो रहा है)? यह "यादृच्छिकता" की व्याख्या करेगा, और रिकॉर्डों को ध्यान में रखते हुए * बहुत * धीरे-धीरे डाला जाता है ... मुझे लगता है कि प्रश्न 'मैक्सवेल्यू' पर सेट है, लेकिन मुझे संदेह है कि समस्या यह नहीं है। –
@ मिच: यह एक बहुत धीमी कनेक्शन पर एक अलविदा किया जाता है। इसलिए एक घंटा टाइमआउट सीमा :) @pst: लूप में सम्मिलित किया जाता है। प्रत्येक पुनरावृत्ति कमांडटेक्स्ट सेट करता है और निष्पादित करता है। तो यह एक बड़े एसक्यूएल के परिणाम का इंतजार नहीं कर रहा है, मुझे संदेह है कि यह एक कमांड टाइमआउट है। इसके अलावा मैं केवल एसक्यूएलकनेक्शन और एसक्लोकॉमैंड के साथ एक बहुत ही सरल डीएएल का उपयोग करता हूं, मुझे कुछ और समय नहीं दिख रहा है। मैं खुशी से किसी अन्य चीज की जांच कर सकता हूं जो आप सुझा सकते हैं? – dstr