क्या mysql कनेक्शन को बंद करना महत्वपूर्ण है?


88

यह mysql कनेक्शन दक्षता बुद्धिमान बंद करने के लिए महत्वपूर्ण है, या यह php फ़ाइल चलाने के बाद स्वचालित रूप से बंद हो जाता है?


इस सवाल को भी देखें stackoverflow.com/questions/336078/…
एलेक्स

मुझे लगता है कि वही ftp_close पर लागू होता है?
doc_id

क्या mysql कनेक्शन को बंद करना महत्वपूर्ण है? हाँ, यह c ++ में विनाशकारी की तरह है
jasinth premkumar

जवाबों:


89

से प्रलेखन :

नोट: सर्वर का लिंक स्क्रिप्ट के निष्पादन के समाप्त होते ही बंद हो जाएगा, जब तक कि यह mysql_close () को स्पष्ट रूप से कॉल करके पहले बंद नहीं हो जाता।

यदि आपकी स्क्रिप्ट में परिणाम प्राप्त करने के बाद प्रदर्शन करने के लिए उचित मात्रा में प्रसंस्करण है और पूर्ण परिणाम सेट को पुनः प्राप्त किया है, तो आपको निश्चित रूप से कनेक्शन बंद करना चाहिए। यदि आप नहीं करते हैं, तो एक मौका है जब वेब सर्वर भारी उपयोग के तहत MySQL सर्वर कनेक्शन सीमा तक पहुंच जाएगा। यदि आप स्क्रिप्ट के अंत तक MySQL कनेक्शन को बंद नहीं कर सकते हैं, तो यह स्पष्ट रूप से करने के लिए अनावश्यक है, हालांकि यह क्लीनर है।

मैं निश्चित नहीं हूं कि फास्टेगी चीजों को कैसे प्रभावित करता है। एक पृष्ठ का दावा है कि PHP का एक निर्माण जो फास्टगि का समर्थन करता है, लगातार कनेक्शन बनाएगा, यहां तक ​​कि mysql_connect के लिए भी। यह उस दस्तावेज का विरोधाभास करता है जब कनेक्शन, स्क्रिप्ट के बजाय प्रक्रिया बंद हो जाती है, समाप्त हो जाती है। इसका परीक्षण करने के बजाय, मैं mysql_close () का उपयोग करने की सिफारिश करने जा रहा हूं। वास्तव में, मैं पीडीओ का उपयोग करने की सलाह देता हूं , अगर यह उपलब्ध है।


मुझे लगता है कि वही ftp_close पर लागू होता है?
doc_id

4
क्या इसका मतलब यह है कि यदि उपयोगकर्ता पृष्ठ को बंद करता है (उदाहरण के लिए) जल्दी (या कुछ त्रुटि है) तो कनेक्शन खोला जा सकता है?
टोनी मिशेल क्यूबेट

1
@ टोटनी मिशेल कबेट "The link to the server will be closed as soon as the execution of the script ends."जब उपयोगकर्ता किसी पृष्ठ को जल्दी बंद कर देता है तो यह PHP सर्वर के लिए कोई बात नहीं है। यह हमेशा की तरह स्क्रिप्ट चलाता है और हमेशा की तरह स्क्रिप्ट को समाप्त करता है। केवल उपयोगकर्ता परिणाम नहीं देखेंगे
अरमान

9

क्या यह महत्वपूर्ण है? इतना नहीं

क्या इसे पालन करने के लिए एक अच्छा अभ्यास माना जाता है? हाँ।

मैं नहीं देखता कि आप इसे बंद क्यों नहीं करना चाहेंगे।


6
खैर, यह देखते हुए भी mysql_closeकि "mysql_close () का उपयोग करने के लिए मैनुअल पेज आमतौर पर आवश्यक नहीं है, क्योंकि स्क्रिप्ट के निष्पादन के अंत में गैर-लगातार खुले लिंक स्वचालित रूप से बंद हो जाते हैं।" मैं वास्तव में इस संबंध को बंद न करने की बुरी प्रथा पर विचार नहीं करूंगा।
निको

4
"मैं यह नहीं देखता कि आप इसे बंद क्यों नहीं करना चाहेंगे।" आप इसे बंद नहीं करना चाहते हैं अगर वहाँ कोई मौका है कि आप इसे फिर से आवश्यकता हो सकती है।
फ्रैंक किसान

1
यदि यू अजाक्स का उपयोग करता है तो यदि कनेक्शन बंद हो जाता है तो हर बार यू अजाक्स का उपयोग करने का प्रयास करें कनेक्शन खोला और फिर से बंद हो जाएगा और यह सर्वर से कनेक्शन को छोड़ने की तुलना में लायक होगा और क्लाइंट कनेक्शन के बारे में परवाह नहीं करता है खुला या नहीं ध्यान रखें कि वेबसाइट गति है
रॉबर्ट

यह वास्तव में महत्वपूर्ण हो सकता है !!! यदि सर्वर लोड अधिक है और आपके पास बहुत सारे अपोजिट कनेक्शन हैं, जैसा कि किसी और ने कहा है कि इससे एक गैर-जिम्मेदार सर्वर हो सकता है, तो मैं इसे बहुत महत्वपूर्ण कहूंगा!
इओलिक्स

बंद करने के लिए बेहतर है। आसान और समस्या रहित।
जोस कार्लोस PHP

4

Cgi जैसी किसी चीज़ का उपयोग करते समय, अपने mysql कनेक्शन को बंद करना पूरी तरह से अनावश्यक है क्योंकि वे स्क्रिप्ट निष्पादन के अंत में स्वचालित रूप से बंद हो जाते हैं। Mod_perl और अन्य जैसी लगातार तकनीकों का उपयोग करते समय, जो अनुरोधों के बीच आपके कनेक्शन को बनाए रखते हैं, फिर कनेक्शन, वैश्विक चर आदि का ट्रैक रखना महत्वपूर्ण है।

मूल रूप से, लगातार डेटा के लिए, अपने आप को साफ करें। तुच्छ, गैर-निरंतर डेटा के लिए, यह सब तब भी चलेगा जब अनुरोध किसी भी तरह से समाप्त हो जाएगा। किसी भी तरह से, सबसे अच्छा अभ्यास हमेशा अपने कनेक्शन को बंद करना है।


1
वह PHP के बारे में बात कर रहा है, जो लगातार नहीं है, ताकि लागू न हो।
साशा चोडगोव

2

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

यदि आप किसी एकल डेटाबेस सर्वर के पीछे हैं तो कनेक्शन पूलिंग या लगातार कनेक्शन का उपयोग करना (यदि आपका मतलब है) एक अच्छा विचार है। हालाँकि यदि अधिक सर्वर हैं और आप लोड बैलेंस कर रहे हैं, तो यह काम के वितरण को चोट पहुँचा सकता है। आमतौर पर कुछ क्लाइंट भारी क्वेरी चलाते हैं जबकि अन्य हल्के वाले चलाते हैं। इसलिए यदि एक ही कनेक्शन का उपयोग n पर किया जाता है, तो कुछ सर्वर भारी भार से टकराएंगे, जबकि अन्य उपयोग में होंगे। छोटे ttls और चर कनेक्शन पूल आकार का उपयोग करने पर विचार करें।


1

अधिकांश CMS अनुरोध के अंत में MySQL कनेक्शन को बंद कर देते हैं, जो वास्तव में अर्थहीन है, क्योंकि PHP इसे वैसे भी करेगा।

हालाँकि, यदि आपके पास एक स्क्रिप्ट है जहाँ कनेक्शन की आवश्यकता अब स्क्रिप्ट के मध्य की ओर नहीं है, और फिर अन्य भारी गतिविधियाँ होती हैं, तो कनेक्शन को स्पष्ट रूप से बंद करना एक अच्छा विचार है। यह कुछ संसाधनों को मुक्त करेगा।

अब, कनेक्शन बंद करने के लाभों के बारे में बहुत कुछ कहा गया है, लेकिन इसे बंद नहीं करने के लाभों के बारे में लगभग कुछ भी नहीं कहा गया है। अनिवार्य रूप से, यदि आप किसी स्क्रिप्ट के अंत में कनेक्शन बंद नहीं करते हैं, तो आप वास्तव में कुछ संसाधनों को बचा रहे हैं। 100 पृष्ठ / सेकंड प्राप्त करने वाले वेब एप्लिकेशन (या किसी भी एप्लिकेशन) की कल्पना करें। तो, हर दूसरे, आपको आह्वान करना होगाmysqli_close 100 बार - जिसका अर्थ है कि प्रत्येक सेकंड में, आपके पास खुले कनेक्शन को बंद करने के लिए डेटाबेस सर्वर पर 100 अनावश्यक राउंडट्रिप्स हैं। प्रदर्शन के दृष्टिकोण से, यह शुद्ध ओवरहेड है, क्योंकि स्क्रिप्ट के समाप्त होने पर PHP खुले कनेक्शनों की जांच करेगी और उन कनेक्शनों को बंद कर देगी, और ऐसा हो सकता है, क्योंकि सब कुछ इतनी जल्दी होता है, कि PHP आपको दिखाई नहीं देता है उन कनेक्शनों को बंद कर दिया और उन्हें फिर से बंद करने का प्रयास करेंगे।

नोट: ऊपर दिए गए उत्तर में माना गया है कि आप लगातार कनेक्शन का उपयोग नहीं कर रहे हैं (किसी भी प्रमुख सीएमएस में लगातार कनेक्शन का उपयोग नहीं किया जाता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.