2016-04-20 2 views
6

पर नहीं, मैं अपने आवेदन पर एंटीटी फ्रेमवर्क का नवीनतम संस्करण उपयोग कर रहा हूं (लेकिन मुझे नहीं लगता कि ईएफ यहां मुद्दा है, बस यह बताएं कि ओआरएम हम क्या करते हैं उपयोग कर रहे हैं) और इस बहु-किरायेदार वास्तुकला है। मैं कुछ तनाव परीक्षण कर रहा था, जो सी # में बनाया गया था, जिसमें यह एक्स-संख्या कार्यों का निर्माण करता है जो कुछ सामान करने के समानांतर में चलता है। पूरी प्रक्रिया की शुरुआत में किसी बिंदु पर, यह प्रत्येक कार्य (इस मामले में प्रत्येक किरायेदार) के लिए एक नया डेटाबेस बनाएगा और फिर ऑपरेशन के बड़े पैमाने पर प्रक्रिया जारी रखेगा। लेकिन कुछ कार्यों पर, यह मेरे कोड के उस सटीक भाग पर 2 SQL अपवाद फेंकता है जहां यह एक नया डेटाबेस बनाने का प्रयास करता है।CREAT डेटाबेस विवरणों के समानांतर निष्पादन के परिणामस्वरूप त्रुटि होती है लेकिन अलग SQL सर्वर आवृत्ति

अपवाद # 1:

डेटाबेस 'मॉडल' पर विशेष ताला प्राप्त नहीं किया जा सका। बाद में ऑपरेशन का पुनः प्रयास करें। डाटाबेस तैयार करें विफल। सूचीबद्ध कुछ फ़ाइल नाम नहीं बनाया जा सकता है। संबंधित त्रुटियों की जांच करें।

अपवाद # 2:

समय समाप्त समाप्त हो गई है। के पूरा होने से पहले समय समाप्ति अवधि समाप्त हो गई है या सर्वर प्रतिक्रिया नहीं दे रहा है।

यह उन दोनों में से एक है और मेरे कोड की उसी पंक्ति पर फेंकता है (जब ईएफ डेटाबेस बनाता है)। स्पष्ट रूप से SQL सर्वर में, डेटाबेस बनाते समय यह एक समय में होता है और 'मॉडल' डेटाबेस को ताला लगाता है (here देखें) इस प्रकार कुछ कार्य प्रतीक्षा कर रहे हैं जो टाइमआउट फेंकता है या 'मॉडल' त्रुटि पर लॉक करता है।

उन परीक्षण हमारे विकास SQL सर्वर पर किया गया था 2014 उदाहरण (12.0.4213) और अगर मैं निष्पादित, कहते हैं, 100 समानांतर कार्यों वहाँ कुछ कार्यों पर फेंक दिया एक त्रुटि होने के लिए या बाध्य होगा कभी कभी भी लगभग आधे कार्य मैंने निष्पादित किया।

लेकिन यहाँ इन सभी में सबसे अधिक परेशान हिस्सा है, जब यह मेरे दूसरे एसक्यूएल सर्वर उदाहरण (12.0.2000), जो मैं अपने पीसी पर स्थानीय स्तर पर स्थापित किया है पर परीक्षण, ऐसी कोई त्रुटि फेंकता है और पूरी तरह से सभी कार्य पूर्ण होने मैंने निष्पादित किया (समानांतर में 1000 कार्य भी!)।

समाधान मैं अब तक की कोशिश की है, लेकिन काम नहीं किया:

  • एफई में वस्तु संदर्भ से टाइमआउट बदल दिया अनंत
  • कनेक्शन स्ट्रिंग पर एक लंबे समय तक या अनंत टाइमआउट जोड़ने की कोशिश की
  • ईएफ पर एक रेट्री रणनीति जोड़ने का प्रयास किया और इसे अधिक समय तक चलाया और
  • वर्तमान में, हमारे देव सर्वर (विंडोज सर्वर 2014 आर 2 का उपयोग करता है) के समान वर्चुअल मशीन स्थापित करने की कोशिश कर रहा है और SQL सर्वर के विशिष्ट संस्करण पर परीक्षण संस्करण देखने के लिए प्रयास करें इसके साथ कोई लेना देना (हाँ, मैं कर रहा हूँ हताश कि :))

वैसे भी, here एक साधारण सी # कंसोल आवेदन आप डाउनलोड करने और इस मुद्दे को दोहराने के लिए कोशिश कर सकते हैं। यह परीक्षण ऐप आपके द्वारा इनपुट किए गए कार्यों की संख्या को निष्पादित करेगा और बस डेटाबेस बनाता है और बाद में क्लीनअप करता है।

उत्तर

1

2 टिप्पणियों:

  1. के बाद से अंतर्निहित मुद्दे संगामिति के साथ कुछ है, और एक "संसाधन" जो एक महत्वपूर्ण बिंदु पर केवल एक ही नहीं, बल्कि एक समवर्ती, एक्सेसर की अनुमति देता है की पहुंच है, यह असुरक्षित है कि लोड के तहत अत्यधिक समवर्ती परिदृश्यों को निष्पादित करते समय आपको दो अलग-अलग मशीनों पर अलग-अलग परिणाम मिल रहे हैं। इसके अलावा, SQL सर्वर इंजन अंतर शामिल हो सकते हैं। यह सब समेकन मुद्दों को समझने और डीबग करने की कोशिश करने के लिए पाठ्यक्रम के बराबर है, खासतौर पर एक इंजन के साथ जिसमें समेकन की अपनी बहुत मजबूत धारणाएं हैं।

  2. कुछ काम करने की कोशिश करके या परिस्थिति को पूरी तरह से समझाते हुए स्थिति के अनाज के खिलाफ जाने की बजाय, जब चीजें अनुभवी काम नहीं कर रही हैं, समस्या के क्लीनर हैंडलिंग के लिए डिजाइन करके दृष्टिकोण क्यों नहीं बदलते?

    • एक विकल्प: संगामिति तुल्यकालन तंत्र के कुछ प्रकार के माध्यम से पहुंच को नियंत्रित करके मॉडल db पर एक विशेष लॉक करने के लिए SQL सर्वर की जरूरत की वास्तविकता को स्वीकार करते हैं - एक System.Threading.Monitor यहाँ क्या हो रहा है के लिए सही के बारे में लग रहा है और यह होगा आपको समय-समय पर होने पर क्या होता है, यह नियंत्रित करने की अनुमति देता है, with a timeout of your choosing। यह SQL सर्वर अंत में लॉक अप प्रकार के परिदृश्य को रोकने में मदद करेगा, जो वर्तमान "टाइमआउट" लक्षण के लिए एक स्पष्टीकरण होगा (हालांकि तनाव भार एकमात्र स्पष्टीकरण हो सकता है)।

    • एक और विकल्प: देखें कि क्या आप इस तरह से डिज़ाइन कर सकते हैं कि आपको सिंक्रनाइज़ करने की आवश्यकता नहीं है। उस बिंदु पर जाएं जहां आप कभी भी एक से अधिक डेटाबेस बनाने का अनुरोध नहीं करते हैं। निर्माण अनुरोधों की किसी तरह की कतार - और कतार को केवल एक धागा द्वारा सेवा के लिए गारंटी दी जाती है - बनाता है कार्यों के परिणामस्वरूप एसिंक/प्रतीक्षा पैटर्न करने के अनुरोध।

किसी भी तरह से, तुम कहाँ इस तनाव परीक्षण के तहत एक क्रॉल को धीमा कर देती स्थितियों, के लिए के साथ सुपर जोर दिया भार विफलता के कारण जा रहे हैं। मुख्य प्रश्न हैं:

  • क्या आपका डिज़ाइन संभवतः सबसे खराब केस लोड के कुछ से अधिक संभाल सकता है और फिर भी स्वीकार्य प्रदर्शन दिखा सकता है?
  • यदि विफलता होती है, तो आपके द्वारा डिजाइन किए गए तरीके से "नियंत्रित" विफलता की आपकी प्रतिक्रिया होती है।
+0

धन्यवाद DWright। मैंने कतारबद्ध कार्रवाई का उपयोग करने के बारे में भी सोचा और डीबी बनाने के लिए एक धागा है, लेकिन जिस समाधान के साथ मैं गया था, मैंने एक "टेम्पलेट" डेटाबेस बनाया था। असल में, एक खाली डीबी जो ईएफ ऐप स्टार्टअप पर बनाता है उसके बाद प्रत्येक कार्य (या किरायेदार) टेम्पलेट डीबी को पुनर्स्थापित करता है और संबंधित लॉजिकल डीबी फ़ाइलों का नाम बदलता है और स्थानांतरित करता है। तब से उसने मेरे लिए ठीक काम किया है। – Randolph

+0

एक अच्छा समाधान की तरह लगता है! – DWright

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