मैंने आपके पास सबसे बड़े BLOB के बारे में एक सवाल का दिलचस्प जवाब देखा। यहाँ वह कथन है जो मैंने ServerFault में देखा है: innodb_log_file_size और innodb_log_buffer_size संयुक्त आपके बड़े ब्लॉब ऑब्जेक्ट के दस गुना से बड़ा होना चाहिए यदि आपके पास बहुत बड़ा है ।
Nils-Anders Nøttseter से उस सर्वरफ़ॉल्ट पोस्ट के आधार पर , आपको तालिका को क्वेरी करना चाहिए और यह पता लगाना चाहिए कि BLOB सबसे बड़ी है, उस संख्या को 11 या अधिक से गुणा करें, और उस उत्तर का उपयोग आगे बढ़ने वाले max_allowed_packet के रूप में करें ।
यह मज़ेदार है कि मैंने एक और प्रश्न को संबोधित किया जहां मैंने सुझाव दिया कि समस्या को उम्मीद से हल करने के लिए मैक्सिमम पैकेट को आकार दें ।
चेतावनी
पुस्तक के अनुसार
यहाँ MySQL पैकेट के बारे में पेज 99 पैराग्राफ 1-3 क्या कहता है:
MySQL नेटवर्क संचार कोड इस धारणा के तहत लिखा गया था कि प्रश्न हमेशा ही कम होते हैं, और इसलिए इसे सर्वर द्वारा एक चंक में भेजा और संसाधित किया जा सकता है, जिसे MySQL शब्दावली में एक पैकेट कहा जाता है । सर्वर पैकेट को स्टोर करने के लिए एक अस्थायी बफर के लिए मेमोरी आवंटित करता है, और यह इसे पूरी तरह से फिट करने के लिए पर्याप्त अनुरोध करता है। इस आर्किटेक्चर को सर्वर के मेमोरी से बाहर चलने से बचने के लिए एहतियात की आवश्यकता होती है --- पैकेट के आकार पर एक कैप, जिसे यह विकल्प पूरा करता है।
इस विकल्प के संबंध में रुचि का कोड sql / net_serv.cc में पाया जाता है
। My_net_read () पर एक नज़र डालें , फिर my_real_read () पर कॉल का अनुसरण करें और net_realloc () पर विशेष ध्यान
दें ।
यह चर कई स्ट्रिंग फंक्शन्स के परिणाम की लंबाई को भी सीमित करता है। विवरण के लिए sql / field.cc और
sql / intem_strfunc.cc देखें।
MySQL पैकेट्स के बारे में यह जानना एक DBA उन्हें एक MySQL पैकेट के अंदर कई BLOB को समायोजित करने के लिए आकार देने की अनुमति देता है, भले ही वे अप्रिय रूप से बड़े हों।
अपनी स्थिति के बारे में, आपको यह पता लगाना चाहिए कि आपके डेटाबेस में सबसे बड़ा BLOB क्या है, उस संख्या को 11 से गुणा करें और उस नंबर पर अपना max_allowed_packet सेट करें । आपको सर्वर के लिए mysql पुनरारंभ किए बिना इसे सेट करने में सक्षम होना चाहिए (व्यक्तिगत रूप से, मैं इसे 256M सेट करूंगा क्योंकि यह माइग्रेशन और प्रतिकृति के बारे में अन्य समस्याओं को संबोधित करेगा, जो इस मंच के दायरे से परे है)। सभी आने वाले कनेक्शनों के लिए इसे अपने डेटाबेस के लिए 256M पर सेट करने के लिए, कृपया इसे चलाएं:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
बाद में, इस सेटिंग को my.cnf [mysqld]
सेक्शन के तहत जोड़ें :
[mysqld]
max_allowed_packet = 256M