कैसे CPU गहन और MySQL में एक DB कनेक्शन (एक वेब ऐप के लिए) को खोल रहा है
- ... जब DB सॉफ्टवेयर लोकलहोस्ट पर है?
- ... जब DB सॉफ्टवेयर दूसरी मशीन पर होता है?
कैसे CPU गहन और MySQL में एक DB कनेक्शन (एक वेब ऐप के लिए) को खोल रहा है
जवाबों:
प्रति DB कनेक्शन आवंटित की जा रही मेमोरी की मात्रा के बारे में सोचें। किन चीजों को आवंटित किया जाना चाहिए? MySQL 5.0 प्रमाणन अध्ययन गाइड के अनुसार , पृष्ठ 357 :
सर्वर प्रत्येक क्लाइंट कनेक्शन के लिए कई बफ़र्स रखता है। क्लाइंट के साथ सूचनाओं के आदान-प्रदान के लिए एक संचार बफर के रूप में उपयोग किया जाता है। अन्य बफ़र्स को टेबल पढ़ने और ज्वाइन करने और ऑपरेशन को सॉर्ट करने के लिए प्रति ग्राहक रखा जाता है।
प्रति-कनेक्शन बफ़र्स कौन सी सेटिंग्स को नियंत्रित करते हैं?
जब कोई कनेक्शन अस्तित्व में आता है तो इन बफ़र्स को आवंटित करने और उनसे निपटने में समय लगता है। उन मानों का योग अधिकतम करने के लिए मत भूलना जो max_connections द्वारा किया जाता है । एक साइड नोट के रूप में, कृपया mysql_pconnect का उपयोग करने से बचना चाहिए क्योंकि PHP और MySQL के लगातार कनेक्शन भी साथ नहीं मिलते हैं। यहाँ इस विषय पर दो जानकारीपूर्ण लिंक दिए गए हैं:
ओएलटीपी जैसे भारी-भरकम पढ़ने वाले भारी-भरकम परिवेश में, यह ओएस में स्वैप के कारण रैम के उपयोग और संभावित अवरोध के संदर्भ में महंगा होगा। कम-लिखने, low_read वेबसाइट पर, मैं उतना चिंता नहीं करता।
मुझे यकीन नहीं है कि यह "कितना अधिक महंगा है" यह मायने रखता है। यह निश्चित रूप से समान कनेक्शन को फिर से उपयोग करने की तुलना में अधिक महंगा है। आप जो निरीक्षण करेंगे, वह इस बात पर निर्भर करेगा कि क्या आप कनेक्शन पूलिंग का सही उपयोग कर रहे हैं, आपका पूल कितना संतृप्त है, बॉक्स पर उपलब्ध संसाधन आदि।
सामान्य तौर पर, यदि आप डेटाबेस के साथ कुछ इंटरैक्शन करने के लिए लूप का प्रदर्शन कर रहे हैं, तो आप लूप के भीतर खुलने और बंद होने की तुलना में उसी सक्रिय कनेक्शन को फिर से इस्तेमाल करने से बहुत बेहतर होने जा रहे हैं (एक एंटी-पैटर्न जिसे मैं अक्सर देखता हूं) ।
किसी वस्तु को फिर से इस्तेमाल करने और उसे फाड़ने और फिर से निर्माण (दोनों के फायदे और नुकसान) के बीच की दुविधा को अक्सर एक समझौते के साथ संबोधित किया जा सकता है: वस्तु को कैश करें, लेकिन सीमित समय के लिए (अर्थात समाप्ति के साथ)। यदि वस्तु अक्सर एक्सेस की जाती है तो इसका पुन: उपयोग किया जा रहा है। लेकिन अगर इसे कुछ समय के लिए उपयोग नहीं किया जाता है, तो एक एक्सपायरी मैकेनिज्म इसका निपटान करता है, जब इसे एक बार फिर से जरूरत पड़ने पर इसे फिर से बनाने के लिए मजबूर किया जाता है।
एक सिस्टम में इन प्रकार के कैश के लिए एक वैश्विक हुक हो सकता है जो कि मेमोरी कम होने पर लगाया जाता है, जो हाल ही में अप्रयुक्त वस्तुओं को छोड़ने के लिए उन सभी को ट्रिगर करता है।
थ्रेड कैशे (thread_cache_size) का उपयोग करके माईसक्ल कैश कनेक्शन (या थ्रेड्स)। इसके लिए अधिकतम मूल्य 100 है। जब ग्राहक कनेक्शन बंद करता है, तो इसे कैश में लौटा दिया जाता है। जब एक नया कनेक्शन खुलता है, तो यह थ्रेड कैश की जाँच करता है। बहुत व्यस्त प्रणाली पर, समापन कनेक्शन खोलना महंगा हो सकता है, खासकर यदि आपके पास लंबे समय तक चलने वाले प्रश्न हैं।
https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html यदि आप मैसकल एंटरप्राइज का खर्च उठा सकते हैं, तो आप थ्रेड पूल प्लग-इन मैसूर 5.6 में लागू कर सकते हैं।