मुझे प्रदर्शन में सुधार करने के लिए SQL सर्वर कोड को संशोधित करना पसंद है, लेकिन कभी-कभी ऐसे परिदृश्य होते हैं जहां कोड को ट्यून करने के बाद भी, एप्लिकेशन से उपयोगकर्ता कार्य को अनुक्रमित और डिज़ाइन करने में अपेक्षित अंतिम-उपयोगकर्ता अनुभव से अधिक समय लगता है। जब ऐसा होता है तो यूजर इंटरफेस को या तो प्रक्रिया पूरी होने तक इंतजार करना पड़ता है या हमें कार्य को संभालने के वैकल्पिक तरीके के साथ आना पड़ता है। सर्विस ब्रोकर द्वारा प्रदान किया गया एसिंक्रोनस प्रोसेसिंग इन परिदृश्यों में से कई के लिए उपयुक्त है और उपयोगकर्ता इंटरफ़ेस से अलग से लंबे समय तक चलने वाले कार्य की पृष्ठभूमि प्रसंस्करण की अनुमति देता है, जिससे उपयोगकर्ता कार्य को वास्तव में किए जाने की प्रतीक्षा किए बिना तुरंत काम करना जारी रख सकता है। . अपने अगले कुछ लेखों में, मैं एक श्रृंखला बनाने की आशा करता हूं कि आप सेवा ब्रोकर का लाभ कैसे उठा सकते हैं, उचित स्पष्टीकरण और कोड उदाहरणों के साथ-साथ कार्यान्वयन समस्याओं के बिना सेवा ब्रोकर की क्षमताओं का लाभ उठाना आसान बनाने के लिए।
एसिंक्रोनस प्रोसेसिंग करने के तरीके
लंबे समय तक चलने वाली, लेकिन पहले से ही ट्यून की गई प्रक्रिया से निपटने के कई तरीके हैं। एप्लिकेशन कोड को बैकग्राउंडवर्कर, बैकग्राउंड थ्रेडपूल या .NET में मैन्युअल रूप से लिखे गए थ्रेड आधारित समाधान का उपयोग करने के लिए फिर से लिखा जा सकता है जो ऑपरेशन को एसिंक्रोनस रूप से करता है। हालांकि, यह इन लंबी चलने वाली प्रक्रियाओं की असीमित संख्या को एप्लिकेशन द्वारा प्रस्तुत करने की अनुमति देता है, जब तक कि सक्रिय प्रक्रियाओं की संख्या को ट्रैक और सीमित करने के लिए अतिरिक्त कोडिंग कार्य नहीं किया जाता है। इसका मतलब है कि एप्लिकेशन का संभावित प्रदर्शन प्रभाव होगा, या लोड के तहत एक सीमा तक पहुंच जाएगा और पिछली प्रतीक्षा में वापस आ जाएगा जिसे हम मूल रूप से रोकने की कोशिश कर रहे थे।
मैंने यह भी देखा है कि इस प्रकार की प्रक्रियाएं SQL एजेंट नौकरियों में एक तालिका से जुड़ी होती हैं जिसका उपयोग जानकारी को संसाधित करने के लिए संग्रहीत करने के लिए किया जाता है। फिर कार्य को या तो समय-समय पर चलाने के लिए शेड्यूल किया जाता है, या एप्लिकेशन द्वारा sp_start_job
का उपयोग करके प्रारंभ किया जाता है जब कोई परिवर्तन प्रसंस्करण के लिए संग्रहीत किया जाता है। हालाँकि, यह केवल लंबे समय तक चलने वाली प्रक्रियाओं के क्रमिक निष्पादन की अनुमति देता है, क्योंकि SQL एजेंट किसी कार्य को एक साथ कई बार चलाने की अनुमति नहीं देता है। नौकरी को उन परिदृश्यों को संभालने के लिए भी डिज़ाइन किया जाना चाहिए जहां कई पंक्तियां प्रसंस्करण तालिका में प्रवेश करती हैं ताकि प्रसंस्करण का सही क्रम हो और बाद में सबमिशन अलग से संसाधित हो।
SQL सर्वर में एसिंक्रोनस प्रोसेसिंग के लिए लीवरेजिंग सर्विस ब्रोकर वास्तव में एसिंक्रोनस प्रोसेसिंग को संभालने के लिए पहले बताई गई विधियों के साथ सीमाओं को संबोधित करता है। ब्रोकर कार्यान्वयन पृष्ठभूमि में अतुल्यकालिक प्रसंस्करण के लिए नए कार्यों को कतारबद्ध करने की अनुमति देता है, और उन कार्यों के समानांतर प्रसंस्करण की भी अनुमति देता है जो एक कॉन्फ़िगर की गई सीमा तक कतारबद्ध हैं। हालांकि, आवेदन स्तर के विपरीत, जब सीमा समाप्त हो जाती है, तो ब्रोकर समाधान केवल प्राप्त होने वाले नए संदेश को कतारबद्ध करता है और इसे संसाधित करने की अनुमति देता है जब वर्तमान प्रसंस्करण कार्यों में से एक पूरा हो जाता है - यह एप्लिकेशन को प्रतीक्षा किए बिना जारी रखने की अनुमति देता है।पी>
एकल डेटाबेस सेवा ब्रोकर कॉन्फ़िगरेशन
जबकि सर्विस ब्रोकर कॉन्फ़िगरेशन जटिल हो सकता है, सरल एसिंक्रोनस प्रोसेसिंग के लिए आपको केवल एकल डेटाबेस कॉन्फ़िगरेशन बनाने के लिए मूल अवधारणाओं को जानने की आवश्यकता है। केवल एक डेटाबेस कॉन्फ़िगरेशन की आवश्यकता है:
- दो संदेश प्रकार बनाना
- एसिंक्रोनस प्रोसेसिंग के अनुरोध के लिए एक
- प्रसंस्करण पूर्ण होने पर वापसी संदेश के लिए एक
- संदेश प्रकारों का उपयोग करने वाला अनुबंध
- परिभाषित करता है कि कौन सा संदेश प्रकार आरंभकर्ता सेवा द्वारा भेजा जाता है और कौन सा संदेश प्रकार लक्ष्य सेवा द्वारा लौटाया जाता है
- लक्ष्य के लिए एक कतार, सेवा और सक्रियण प्रक्रिया
- कतार सर्जक सेवा द्वारा लक्ष्य सेवा को भेजे गए संदेशों का संग्रहण प्रदान करती है
- सक्रियण प्रक्रिया कतार से संदेशों के प्रसंस्करण को स्वचालित करती है
- एक अनुरोधित कार्य को संसाधित करने के बाद आरंभकर्ता सेवा को एक पूर्ण संदेश लौटाता है
- http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog और http://schemas.microsoft.com/SQL/ServiceBroker/Error सिस्टम संदेश प्रकारों को हैंडल करता है
- सर्जक के लिए एक कतार, सेवा और सक्रियण प्रक्रिया
- कतार सेवा को भेजे गए संदेशों का संग्रहण प्रदान करती है
- सक्रियण प्रक्रिया वैकल्पिक है लेकिन कतार से संदेशों के प्रसंस्करण को स्वचालित करता है
- पूर्ण संदेश को लक्षित सेवा तक संसाधित करता है और वार्तालाप समाप्त करता है
- http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog और http://schemas.microsoft.com/SQL/ServiceBroker/Error सिस्टम संदेश प्रकारों को हैंडल करता है
इन बुनियादी घटकों के अलावा, मैं कोड को साफ रखने के लिए वार्तालाप बनाने और ब्रोकर सेवाओं के बीच संदेश भेजने के लिए एक रैपर संग्रहीत प्रक्रिया का उपयोग करना पसंद करता हूं, और वार्तालाप पुन:उपयोग या 150 वार्तालाप चाल को लागू करके आवश्यकतानुसार स्केल करना आसान बनाता है। SQLCAT टीम श्वेतपत्र। कई सरल एसिंक्रोनस प्रोसेसिंग कॉन्फ़िगरेशन के लिए, इन प्रदर्शन ट्यूनिंग तकनीकों को लागू करने की आवश्यकता नहीं हो सकती है। हालांकि, एक रैपर संग्रहीत प्रक्रिया का उपयोग करके, कोड में एक बिंदु को बदलना बहुत आसान हो जाता है, भविष्य में संदेश भेजने वाली प्रत्येक प्रक्रिया को बदलने के बजाय, यह आवश्यक हो जाना चाहिए।
यदि आपने सर्विस ब्रोकर को एक नज़र नहीं दिया है, तो यह कई संभावित परिदृश्यों को हल करने के लिए अतुल्यकालिक रूप से डिकॉउल्ड प्रोसेसिंग करने का एक वैकल्पिक तरीका प्रदान कर सकता है। मेरी अगली पोस्ट में हम एक उदाहरण कार्यान्वयन के लिए स्रोत कोड के माध्यम से चलेंगे और बताएंगे कि एसिंक्रोनस प्रोसेसिंग के लिए कोड का लाभ उठाने के लिए कहां विशिष्ट परिवर्तन करने की आवश्यकता होगी।