संक्षिप्त उत्तर:आपके प्रश्न शायद बहुत धीमे हैं और mysql सर्वर के पास उन सभी अनुरोधों को संसाधित करने के लिए पर्याप्त थ्रेड नहीं हैं जिन्हें आप भेजने का प्रयास कर रहे हैं।
लंबा उत्तर:
पृष्ठभूमि के रूप में, Cloud SQL की दो सीमाएँ हैं जो यहाँ प्रासंगिक हैं:
- कनेक्शन:ये आपके कोड में 'conn' ऑब्जेक्ट के अनुरूप हैं। सर्वर पर एक संबंधित डेटास्ट्रक्चर है। एक बार जब आपके पास इनमें से बहुत से ऑब्जेक्ट (वर्तमान में 1000 के लिए कॉन्फ़िगर किया गया) हो, तो हाल ही में उपयोग किए गए कम से कम स्वचालित रूप से बंद हो जाएंगे। जब आपके नीचे कोई कनेक्शन बंद हो जाता है, तो अगली बार जब आप उस कनेक्शन का उपयोग करने का प्रयास करेंगे तो आपको एक अज्ञात कनेक्शन त्रुटि (ApplicationError:1007) मिलेगी।
- समवर्ती अनुरोध:ये ऐसे प्रश्न हैं जो सर्वर पर निष्पादित हो रहे हैं। प्रत्येक निष्पादन क्वेरी सर्वर में एक थ्रेड को जोड़ती है, इसलिए 100 की सीमा होती है। जब बहुत अधिक समवर्ती अनुरोध होते हैं, तो बाद के अनुरोध आपको प्राप्त होने वाली त्रुटि के साथ अस्वीकार कर दिए जाएंगे (ApplicationError:1033)
ऐसा नहीं लगता कि कनेक्शन की सीमा आपको प्रभावित कर रही है, लेकिन मैं इसका उल्लेख केवल मामले में करना चाहता था।
जब समवर्ती अनुरोधों की बात आती है, तो सीमा बढ़ाने से मदद मिल सकती है, लेकिन यह आमतौर पर समस्या को बदतर बना देता है। हमने अतीत में दो मामले देखे हैं:
- डेडलॉक:एक लंबी चलने वाली क्वेरी डेटाबेस की एक महत्वपूर्ण पंक्ति को लॉक कर रही है। बाद के सभी प्रश्न उस लॉक पर ब्लॉक हो जाते हैं। उन प्रश्नों पर ऐप का समय समाप्त हो जाता है, लेकिन वे सर्वर पर चलते रहते हैं, उन थ्रेड्स को डेडलॉक टाइमआउट ट्रिगर।
- धीमी क्वेरी:प्रत्येक क्वेरी वास्तव में, वास्तव में धीमी है। यह आमतौर पर तब होता है जब क्वेरी को अस्थायी फ़ाइल प्रकार की आवश्यकता होती है। एप्लिकेशन का समय समाप्त हो जाता है और क्वेरी का पुन:प्रयास करता है जबकि क्वेरी का पहला प्रयास अभी भी चल रहा है और समवर्ती अनुरोध सीमा के विरुद्ध गिना जा रहा है। यदि आप अपना औसत क्वेरी समय पा सकते हैं, तो आप अनुमान लगा सकते हैं कि आपका MySQL इंस्टेंस कितने क्यूपीएस का समर्थन कर सकता है (उदाहरण के लिए 5 एमएस प्रति क्वेरी का मतलब प्रत्येक थ्रेड के लिए 200 क्यूपीएस है। चूंकि 100 धागे हैं, आप 20,000 क्यूपीएस कर सकते हैं। 50 एमएस प्रति क्वेरी का अर्थ है 2000 क्यूपीएस।)
आपको EXPLAIN का उपयोग करना चाहिए और इंजन INNODB स्थिति दिखाएं यह देखने के लिए कि दोनों में से कौन सी समस्या चल रही है।
बेशक, यह भी संभव है कि आप अपने उदाहरण पर केवल एक टन ट्रैफ़िक चला रहे हों और पर्याप्त थ्रेड न हों। उस स्थिति में, आप शायद वैसे भी उदाहरण के लिए सीपीयू को अधिकतम कर रहे होंगे, इसलिए अधिक धागे जोड़ने से मदद नहीं मिलेगी।