क्या हो रहा है यह बताने के लिए घटनाओं का प्रवाह यहां दिया गया है:
- एक कनेक्शन का अनुरोध किया जाता है और कॉलर द्वारा उपयोग किया जाता है (एप्लिकेशन या कनेक्शन पूल)
- कॉलर इसका एक संदर्भ रखता है ताकि कनेक्शन का पुन:उपयोग किया जा सके
- कॉलर निष्क्रियता की अवधि से गुज़रता है (उदाहरण के लिए, रात भर एक देव प्रणाली या सप्ताहांत में एक क्यूए प्रणाली)।
- एक बार जब वह डेटाबेस कनेक्शन उपयोग में नहीं होता है, तो डेटाबेस कनेक्शन को निष्क्रिय मानता है। क्योंकि यह निष्क्रिय है, एक निश्चित समय के बाद (MySQL डिफ़ॉल्ट 8 घंटे है) डेटाबेस कनेक्शन बंद कर देता है।
- कॉलर के पास अभी भी कनेक्शन के लिए एक हैंडल है, और जब कॉलर फिर से कनेक्शन का उपयोग करने का प्रयास करता है तो अप्रिय रूप से पता चलता है कि कनेक्शन बंद कर दिया गया है।
कारण autoReconnect=true काम करता है, और यह कि कनेक्शन की वैधता का परीक्षण करने वाला पूल यह है कि आप कॉलिंग सिस्टम को इस स्थिति के लिए कनेक्शन का परीक्षण करने और यह स्थिति होने पर फिर से प्रयास करने का निर्देश दे रहे हैं।
सत्यापन क्वेरी प्रदर्शन को प्रभावित करेगी या नहीं:सिद्धांत रूप में यह कुछ करने के लिए कनेक्शन का उपयोग कर रहा है। व्यवहार में कुछ इतना तुच्छ है कि आपके पूरे सिस्टम के संदर्भ में उसका प्रभाव नगण्य है।
[संपादित करें]
इस मामले में अपाचे डीबीसीपी कनेक्शन पर लटकने वाला कनेक्शन पूल है, लेकिन आप नहीं चाहते कि डीबीसीपी प्रत्येक कॉल के बाद कनेक्शन बंद कर दे। कनेक्शन पूल का उद्देश्य अगली कॉल के लिए कनेक्शन तैयार रखना है क्योंकि कनेक्शन बनाना महंगा है। पूल द्वारा अनुरक्षित कनेक्शन ऑब्जेक्ट वास्तविक डेटाबेस कनेक्शन द्वारा समर्थित हैं, और डेटाबेस वह है जो निष्क्रिय टाइमआउट अवधि के बाद उस वास्तविक कनेक्शन को बंद कर देता है। ध्यान दें कि निष्क्रिय कनेक्शन को बंद करने का टाइमआउट डेटाबेस पर कॉन्फ़िगर किया गया है, कनेक्शन पूल पर नहीं। इस वजह से, डीबीसीपी के पास यह जानने का कोई तरीका नहीं है कि कनेक्शन बंद हो गया है या नहीं, जब तक कि वह वास्तव में इससे जुड़ने की कोशिश नहीं करता। इसलिए आपको एक सत्यापन क्वेरी की आवश्यकता है।
DBCP को कॉन्फ़िगर करने के बारे में अधिक जानकारी के लिए, कॉन्फ़िगरेशन पेज देखें। और API डॉक्स ।