2010-05-01 25 views
10

कनेक्शन टाइमआउट = 0 का लाभ और नुकसान क्या है?कनेक्शन टाइमआउट और कनेक्शन लाइफटाइम

और कनेक्शन लाइफटाइम = 0 का उपयोग क्या है?

, उदा,

(Database=TestDB; 
port=3306; 
Uid=usernameID; 
Pwd=myPassword; 
Server=192.168.10.1; 
Pooling=false; 
Connection Lifetime=0; 
Connection Timeout=0) 

और कनेक्शन पूलिंग के उपयोग क्या है?

उत्तर

24

टाइमआउट यह है कि आप छोड़ने से पहले अनुरोध से प्रतिक्रिया के लिए कितने समय तक प्रतीक्षा करते हैं। TimeOut = 0 का मतलब है कि आप कनेक्शन के लिए हमेशा के लिए इंतजार कर रहे हैं। अच्छा मुझे लगता है कि यदि आप वास्तव में धीमी सर्वर से कनेक्ट कर रहे हैं तो जवाब देने में 12 घंटे लगते हैं तो यह सामान्य है :-)। आम तौर पर एक बुरी चीज। आप अनुरोध पर किसी प्रकार का उचित टाइमआउट रखना चाहते हैं, ताकि आप महसूस कर सकें कि आपका लक्ष्य नीचे है और आपके जीवन के साथ आगे बढ़ रहा है।

कनेक्शन लाइफटाइम = मारने से पहले कनेक्शन कितना समय तक रहता है और फिर से बनाया जाता है। 0 का जीवनकाल का मतलब कभी भी मारना और पुन: बनाना नहीं है। आम तौर पर एक बुरी बात नहीं, क्योंकि कनेक्शन को मारना और पुनर्निर्माण करना धीमा है। विभिन्न बग के माध्यम से आपके कनेक्शन अस्थिर स्थिति में फंस सकते हैं (जैसे अजीब 3 तरीके के लेन-देन से निपटने पर) .. लेकिन 99% समय कनेक्शन कनेक्शन को अनंत के रूप में रखना अच्छा होता है।

कनेक्शन पूलिंग इस तथ्य से निपटने का एक तरीका है कि कनेक्शन बनाना बहुत धीमा है। तो प्रत्येक अनुरोध के लिए एक नया कनेक्शन बनाने के बजाय, इसके बजाय, पूल, 10, प्रीडेड कनेक्शन का पूल है। जब आपको एक की आवश्यकता होती है, तो आप एक उधार लेते हैं, इसका इस्तेमाल करते हैं, और वापस आते हैं। आप पूल के आकार को समायोजित कर सकते हैं ताकि आपका ऐप कैसा व्यवहार कर सके। बड़ा पूल = अधिक कनेक्शन = एक समय में सामानों को और अधिक थ्रेड कर रहा है, लेकिन यह जो कुछ भी आप कर रहे हैं उसे भी जबरदस्त कर सकते हैं।

सारांश में:
connectiontimeout = 0 बुरा है, यह कुछ 30 सेकंड की तरह उचित हैं।
ConnectionLifetime = 0 ठीक
ConnectionPooling = विकलांग बुरा है, आप की संभावना इसका उपयोग करना चाहते होंगे।

+0

क्या मुझे पता है कि आपको यह त्रुटि है कि यह त्रुटि कैसे आई है? 'निर्दिष्ट किसी भी MySQL होस्ट से कनेक्ट करने में असमर्थ।' – Mark

+0

आपका सर्वर प्रतिसाद नहीं दे रहा है। नीचे हो सकता है, दाहिने बंदरगाह पर नहीं खुल सकता है, फ़ायरवॉल हो सकता है, आदि। अधिक जानकारी की आवश्यकता है – bwawok

+1

मुझे कनेक्शन लाइफटाइम के अधिक verbose desc को तो mysql दस्तावेज़ पसंद है। – Nicholi

7

मुझे पता है कि यह एक पुराना धागा है, लेकिन मुझे लगता है कि एक उदाहरण को इंगित करना महत्वपूर्ण है जिसमें आप कनेक्शन पूलिंग को अक्षम करना चाहते हैं या कनेक्शन लाइफटाइम का उपयोग करना चाहते हैं।

कुछ वातावरण (विशेष रूप से Oracle का उपयोग कर, या कम से कम मेरे अनुभव में जब) वेब अनुप्रयोग इतना है कि यह बनाम एक निश्चित कनेक्शन सर्वर का विन्यास फ़ाइल में स्थित स्ट्रिंग उपयोगकर्ता के क्रेडेंशियल्स का उपयोग डेटाबेस से कनेक्ट करता है डिज़ाइन किया गया है में

। इस मामले में कनेक्शन पूलिंग सक्षम करने से सर्वर प्रत्येक वेबसाइट के लिए कनेक्शन पूल बनाने का कारण बनता है (Pool Fragmentation देखें)। परिदृश्य के आधार पर यह या तो अच्छा या बुरा हो सकता है।

हालांकि, कनेक्शन पूलिंग एक समस्या बन जाती है जब डाटाबेस सर्वर अधिकतम निष्क्रिय समय से अधिक डेटाबेस कनेक्शन को मारने के लिए कॉन्फ़िगर किया गया है, तो इस तथ्य के कारण डेटाबेस सर्वर कनेक्शन कनेक्शन को मार सकता है जो अभी भी कनेक्शन पूल में रह सकता है। इस परिदृश्य में कनेक्शन लाइफटाइम इन कनेक्शनों को फेंकने के लिए आसान हो सकता है क्योंकि वे सर्वर द्वारा बंद कर दिए गए हैं।

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