sql server - How to dispatch thousands of SQL requests asynchronously -
हम एक साधारण अनुप्रयोग लिख रहे हैं:
- हजारों एसक्यूएल चयन बयान
- Sp_who2 द्वारा सत्यापित), या सिर्फ एसक्यूएल क्वेरी की तुलना में पूरा करने के लिए अधिक लंबा समय लेता है (शायद किसी तरह की गतिरोध?)।
हम हैं:
- कॉलबैक हैंडलर में एंडएक्सक्वायर्थ रीडर को बुला रहा है।
- conn.close () और conn.Dispose () कॉल करें
- एक दूसरे कॉल को फिर से शुरू करना
सार्वजनिक स्थिर शून्य प्रारंभिक () {// सरणी के लिए क्वेरी का निर्माण [i] // ... SqlConnection conn = new SqlConnection (AsyncConnectionString); conn.Open (); सीएमडी.बीजिनएक्सक्वायर्थ रीडर (कॉलबैकहैंडलर, सीएमडी); i ++; } सार्वजनिक स्थिर शून्य कॉलबैकहैंडलर (IAsyncResult एआर) {// सीएमडी सीएमडी खोलें। ENDExecuteReader (); // किसी DataTable में कुछ सामान पढ़ें ... // SqlBulkCopy एक अन्य डेटाबेस (सिंक्रोनस) cmd.Connection.Close (); cmd.Connection.Dispose (); StartQuery ();
धन्यवाद
P>
मुझे लगता है कि आपने कनेक्शन स्ट्रिंग पर सेट किया था। सीएलआर में जमा किए जाने वाले हजारों शुरूएक्सएक्टेक प्रश्नों को आपदा के लिए एक नुस्खा है:
- आपको जल्दी से एसक्यूएल सर्वर में कैप्चर किया जाएगा और लंबे कनेक्शन का सामना करना शुरू होगा
ओपन
बार और बार-बार बहिष्कार। - समानांतर में 1000 भार चलाने से एन कनेक्शन पर क्रमिक रूप से 1000 लोड चलने की तुलना में धीमी गति से गारंटी दी जाती है, जहां एन को सर्वर पर कोर की संख्या से दिया जाता है। समानांतर अनुरोधों के हजारों से साझा संसाधनों पर अत्यधिक विवाद होगा और एक-दूसरे को धीमा कर देगा।
- सीएलआर में कतारबद्ध अनुरोधों के साथ आपके पास कोई विश्वसनीयता नहीं है। अगर प्रक्रिया क्रैश हो जाती है, तो आप किसी भी ट्रेस के सभी काम को ढीले कर देते हैं।
एक कतार का उपयोग करने के लिए एक बेहतर तरीका है, जिससे श्रमिकों का एक पूल लोड करता है और उन्हें निष्पादित करें। एक ठेठ निर्माता-उपभोक्ता श्रमिकों (उपभोक्ताओं) की संख्या SQL सर्वर संसाधनों (सीपीयू कोर, मेमोरी, भार के आईओ प्रतिमान) द्वारा ट्यून की जाएगी, लेकिन एक सुरक्षित संख्या सर्वर कोर की संख्या 2 गुना होगी। प्रत्येक कार्यकर्ता इसके कार्य के लिए एक समर्पित कनेक्शन का उपयोग करता है श्रमिकों की भूमिका और कतार की भूमिका काम को तेज करने के लिए नहीं है, बल्कि इसके विपरीत, वे आपको सर्वर को भंग करने से रोकने के लिए थ्रॉटलिंग तंत्र के रूप में कार्य करते हैं।
< P> एक भी बेहतर दृष्टिकोण है कि कतार को दुर्घटना से पुनर्प्राप्त करने के साधन के रूप में डेटाबेस में बने रहना है। ऐसा करने के उचित तरीके के लिए देखें, चूंकि टेबल पर आधारित कतार मौखिक रूप से त्रुटि प्रवण है।और अंत में, आप केवल SQL सर्वर को सब कुछ संभाल कर सकते हैं, कतार, थ्रॉटलिंग और प्रसंस्करण स्वयं के द्वारा। देखें और अनुवर्ती लेख।
सही समाधान क्या है, जो आपकी समस्या के बारे में बहुत सी कारकों पर निर्भर करता है, लेकिन मैं नहीं करता, इसलिए मैं यह नहीं सुझा सकता कि आप किस तरह से जाना चाहिए। / P>
Comments
Post a Comment