Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

यादृच्छिक सरल प्रश्नों पर क्वेरी के दौरान MySQL सर्वर से कनेक्शन टूट गया

MySQL से कनेक्शन को कई तरीकों से बाधित किया जा सकता है, लेकिन मैं मारियो कैरियन के उत्तर पर दोबारा गौर करने की सलाह दूंगा क्योंकि यह एक बहुत ही बुद्धिमान उत्तर है।

ऐसा लगता है कि कनेक्शन बाधित है क्योंकि इसे अन्य प्रक्रियाओं के साथ साझा किया जा रहा है, जिससे संचार प्रोटोकॉल त्रुटियां हो रही हैं...

...यह आसानी से हो सकता है यदि कनेक्शन पूल प्रक्रिया बाध्य है, जो मुझे विश्वास है कि यह ActiveRecord में है, जिसका अर्थ है कि एक ही कनेक्शन को विभिन्न प्रक्रियाओं में एक साथ कई बार "चेक-आउट" किया जा सकता है।

समाधान यह है कि डेटाबेस कनेक्शन केवल fork . के बाद ही स्थापित किए जाने चाहिए एप्लिकेशन सर्वर में स्टेटमेंट।

मुझे नहीं पता कि आप किस सर्वर का उपयोग कर रहे हैं, लेकिन यदि आप warmup . का उपयोग कर रहे हैं सुविधा - नहीं।

यदि आप पहले नेटवर्क अनुरोध से पहले कोई डेटाबेस कॉल चला रहे हैं - ऐसा न करें।

इनमें से कोई भी क्रिया संभावित रूप से fork . से पहले कनेक्शन पूल को इनिशियलाइज़ कर सकती है आईएनजी होती है, जिससे MySQL कनेक्शन पूल को प्रक्रियाओं के बीच साझा किया जाता है जबकि लॉकिंग सिस्टम नहीं है।

मैं यह नहीं कह रहा हूं कि यह समस्या का एकमात्र संभावित कारण है, जैसा कि @ स्लॉथ-जेआर द्वारा कहा गया है, अन्य विकल्प भी हैं... लेकिन उनमें से अधिकतर आपके विवरण के अनुसार कम संभावना प्रतीत होते हैं।

सिडेनोट:

<स्ट्राइक>प्रत्येक प्रक्रिया में कई कनेक्शन हो सकते हैं। आपके मामले में, आपके पास 500X36 तक कनेक्शन हो सकते हैं . (संपादित करें देखें)

सामान्य तौर पर, पूल में कनेक्शन की संख्या अक्सर प्रत्येक प्रक्रिया में थ्रेड्स की संख्या के समान हो सकती है (यह थ्रेड की संख्या से कम नहीं होनी चाहिए, या विवाद आपको धीमा कर देगा)। कभी-कभी आपके आवेदन के आधार पर कुछ और जोड़ना अच्छा होता है।

संपादित करें:

मैं इस तथ्य को अनदेखा करने के लिए क्षमा चाहता हूं कि प्रक्रिया गणना MySQL डेटा को संदर्भित कर रही थी न कि एप्लिकेशन डेटा को।

आपके द्वारा दिखाई गई प्रक्रिया गणना MySQL सर्वर डेटा है, जो ऐसा लगता है कि प्रति कनेक्शन IO योजना में एक थ्रेड का उपयोग किया जाता है . "प्रक्रिया" डेटा वास्तव में सक्रिय कनेक्शनों की गणना करता है और वास्तविक प्रक्रियाओं या धागे नहीं (हालांकि इसे धागे की संख्या में भी अनुवाद करना चाहिए)।

इसका मतलब है कि प्रति आवेदन प्रक्रिया में संभावित 500 कनेक्शनों में से (यानी, यदि आप अपने आवेदन के लिए 8 प्रक्रियाओं का उपयोग कर रहे हैं, तो यह 8X500=4,000 अनुमत कनेक्शन होंगे) आपके आवेदन ने अब तक केवल 36 कनेक्शन खोले हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql में तारीख के साथ आउटफाइल का नाम बदलें

  2. Magento स्थापित कर रहा है, डेटाबेस कनेक्शन त्रुटि प्राप्त करें।

  3. MySQL अपडेट क्वेरी - क्या रेस कंडीशन और रो लॉकिंग पर 'कहां' कंडीशन का सम्मान किया जाएगा? (php, PDO, MySQL, InnoDB)

  4. PHP को निष्पादित किए बिना SQL सिंटैक्स को सत्यापित करने का कोई तरीका है?

  5. Neo4j . के बारे में