मैं सुझाव दूंगा कि, लगभग किसी भी ग्राहक/सर्वर सेट-अप में, कनेक्शन की आवश्यकता होने पर कनेक्शन को छोड़ना बुरा विचार है।
मैं विशेष रूप से डीबी 2/जेड कनेक्शन के बारे में सोच रहा हूं लेकिन यह सभी सर्वरों (डेटाबेस और अन्यथा) के लिए समान रूप से लागू होता है। ये कनेक्शन सर्वर पर संसाधनों का उपभोग करते हैं जिनका उपयोग कहीं और किया जा सकता है।
यदि आप कॉर्पोरेट वातावरण में कनेक्शन खोलना चाहते हैं, जहां हजारों ग्राहक डेटाबेस से कनेक्ट होते हैं, तो आप शायद अपने घुटनों पर मेनफ्रेम भी लाएंगे।
मैं सभी कनेक्शन पूलिंग के विचार के लिए हूं, लेकिन व्यक्तिगत सत्रों को हमेशा के लिए खोलने की कोशिश करने के विचार के लिए बहुत कुछ नहीं है।
मेरी सलाह के रूप में निम्नानुसार होगा:
1/अपने कनेक्शन पूल में कनेक्शन के तीन प्रकार है:
- बंद कर दिया (ताकि अपने पूल नहीं वास्तव में में)।
- तैयार, जिसका अर्थ खुला है लेकिन ग्राहक द्वारा उपयोग में नहीं है।
- सक्रिय, जिसका अर्थ क्लाइंट द्वारा उपयोग में किया जाता है।
2/अपने कनेक्शन पूलिंग को कम से कम तैयार कनेक्शन बनाए रखें, न्यूनतम एन और अधिकतम एम एन को शिखर गति के आधार पर समायोजित किया जा सकता है जिस पर आपके ग्राहक कनेक्शन का अनुरोध करते हैं। यदि तैयार कनेक्शन की संख्या शून्य तक गिर जाती है, तो आपको एक बड़ी एन की आवश्यकता होती है।
3/जब कोई ग्राहक कनेक्शन चाहता है, तो उन्हें तैयार लोगों में से एक (इसे सक्रिय करना) दें, फिर एन तैयार होने से कम समय में तुरंत एक नया खोलें (लेकिन ग्राहक इसके लिए प्रतीक्षा न करें पूरा करने के लिए, या आप पूलिंग का लाभ खो देंगे)। यह सुनिश्चित करता है कि कम से कम एन तैयार कनेक्शन हमेशा रहेगा। यदि कोई ग्राहक तैयार होने पर तैयार नहीं होता है, तो आपको एक नया निर्माण करते समय चारों ओर इंतजार करना होगा।
4/जब ग्राहक सक्रिय कनेक्शन के साथ समाप्त होता है, तो एम तैयार तैयार कनेक्शन से कम होने पर इसे तैयार स्थिति में वापस कर दें। अन्यथा इसे बंद करें। यह आपको एम से तैयार कनेक्शन से अधिक होने से रोकता है।
5/समय-समय पर पुराने कनेक्शन को रोकने के लिए तैयार कनेक्शन रीसायकल करें। यदि एन तैयार कनेक्शन से अधिक है, तो बस सबसे पुराना कनेक्शन बंद करें। अन्यथा इसे बंद करें और दूसरा खोलें।
इसका पर्याप्त लाभ और सर्वर कनेक्शन अधिभारित किए बिना आपके कनेक्शन पूल में उपलब्ध युवा कनेक्शन का लाभ है।
धन्यवाद बिल। मैं सत्र स्थिति से चिंतित नहीं हूं क्योंकि मेरे सत्र केवल तभी खोले जाते हैं जब आवश्यक हो और फिर बंद हो; 8 घंटे के लिए एक खुला रखना शायद वैसे भी एक बुरा विचार है। क्या मुझे इसे जेडीबीएल यूआरएल में कॉन्फ़िगर करना चाहिए, या क्या मैं इसे हाइबरनेट गुणों के माध्यम से कॉन्फ़िगर कर सकता हूं? – Uri
मैं इसे जेडीबीसी यूआरएल में कॉन्फ़िगर कर दूंगा। –
'autoReconnect' प्रॉपर्टी का उपयोग करने की अनुशंसा नहीं की जाती है क्योंकि इसमें कुछ अवांछित साइड इफेक्ट्स हैं। इसके बजाय, आपको सर्वर पर 'wait_timeout' को 8 घंटे के डिफ़ॉल्ट से उच्च मान पर बढ़ाना चाहिए। संदर्भ: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html – nuaavee