MySQL कनेक्शन के मूक हत्यारों में से एक MySQL पैकेट है।
सबसे पहले, आइए जानें कि MySQL पैकेट क्या है।
"अंडरस्टैंडिंग माईएसक्यूएल इंटरनल्स" के पृष्ठ 99 (आईएसबीएन 0-596-00957-7) के अनुसार , यहां पैराग्राफ 1-3 हैं जो MySQL पैकेट्स की व्याख्या कर रहे हैं:
MySQL नेटवर्क कम्युनिकेशन कोड इस धारणा के तहत लिखा गया था कि प्रश्न हमेशा बहुत कम होते हैं, और इसलिए इसे एक चंक में सर्वर द्वारा भेजा और संसाधित किया जा सकता है, जिसे MySQL शब्दावली में एक पैकेट कहा जाता है । पैकेट को संग्रहीत करने के लिए सर्वर अस्थायी बफर के लिए मेमोरी आवंटित करता है, और यह इसे पूरी तरह से फिट करने के लिए पर्याप्त अनुरोध करता है। इस आर्किटेक्चर को सर्वर के मेमोरी से बाहर चलने से बचने के लिए एहतियात की आवश्यकता होती है --- पैकेट के आकार पर एक कैप, जिसे यह विकल्प पूरा करता है।
इस विकल्प के संबंध में रुचि का कोड sql / net_serv.cc में पाया जाता है
। My_net_read () पर एक नज़र डालें , फिर my_real_read () पर कॉल का अनुसरण करें और net_realloc () पर विशेष ध्यान
दें ।
यह चर कई स्ट्रिंग फंक्शंस के परिणाम की लंबाई को भी सीमित करता है। विवरण के लिए sql / field.cc और
sql / intem_strfunc.cc देखें।
MySQL पैकेट के बारे में यह जानकर कि एक डेवलपर / DBA उन्हें एक पैकेट के अंदर कई BLOB को समायोजित करने के लिए आकार दे सकता है, भले ही वे अप्रिय रूप से बड़े हों। निश्चित रूप से, बहुत छोटा पैकेट इस संबंध में खुले कनेक्शन के लिए समस्या पैदा करेगा।
MySQL प्रलेखन के अनुसार
यदि आप सर्वर पर कोई क्वेरी भेजते हैं, तो गलत या बहुत बड़ा होने पर आपको ये त्रुटियां हो सकती हैं। यदि mysqld एक पैकेट प्राप्त करता है जो बहुत बड़ा है या ऑर्डर से बाहर है, तो यह मानता है कि क्लाइंट के साथ कुछ गलत हो गया है और कनेक्शन बंद कर देता है। यदि आपको बड़े प्रश्नों की आवश्यकता है (उदाहरण के लिए, यदि आप बड़े BLOB स्तंभों के साथ काम कर रहे हैं), तो आप सर्वर के अधिकतम_allowed_packet चर को सेट करके क्वेरी सीमा बढ़ा सकते हैं, जिसका डिफ़ॉल्ट मान 1MB है। आपको क्लाइंट अंत पर अधिकतम पैकेट आकार बढ़ाने की भी आवश्यकता हो सकती है। पैकेट का आकार निर्धारित करने के बारे में अधिक जानकारी धारा C.5.2.10, "पैकेट बहुत बड़ी" में दी गई है।
एक INSERT या REPLACE स्टेटमेंट जो कई शानदार पंक्तियों को सम्मिलित करता है, इस प्रकार की त्रुटियों का कारण भी बन सकता है। या तो इन बयानों में से कोई भी एक सर्वर को भेजे जाने के बावजूद पंक्तियों की संख्या के बावजूद अनुरोध करता है; इस प्रकार, आप अक्सर INSERT या REPLACE पर भेजी गई पंक्तियों की संख्या को कम करके त्रुटि से बच सकते हैं।
सिफ़ारिश करना
डिफ़ॉल्ट 1M के बाद से max_allowed_packet को बहुत बड़ी संख्या में बढ़ाने का प्रयास करें । मैं आपके वर्तमान डेटासेट में आपके सबसे बड़े TEXT या BLOB फ़ील्ड के 10 गुना होने का सुझाव दूंगा।
अधिकतम 25 मीटर करने के लिए, आप इसे /etc/my.cnf या my.ini पर जोड़ सकते हैं
[mysqld]
max_allowed_packet=256M
mysqld के भविष्य के पुनरारंभ को कवर करने के लिए। सर्वर पर अब मान स्थापित करने के लिए, कृपया इसे चलाएं:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
कोशिश करो !!!