MySQL "max_allowed_packet" सेटिंग वास्तव में क्या नियंत्रित करती है?


8

हम पिछले चार घंटों से डेटाबेस की समस्याओं की सफाई कर रहे हैं, एक टूटे हुए के लिए धन्यवाद mysqldumpजो पर्याप्त रूप से गलत नहीं था। हमें ये त्रुटियां हो रही थीं:

mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014

वह सेटिंग क्या करता है? यह स्पष्ट रूप से आईपी पैकेट आकार नहीं है, क्योंकि मैंने इसे अब 32M पर सेट कर दिया है। इसका अस्तित्व क्यों है?

जवाबों:


7

"अंडरस्टैंडिंग माईएसक्यूएल इंटरनल्स" के पृष्ठ 99 (आईएसबीएन 0-596-00957-7) के अनुसार , यहां पैराग्राफ 1-3 इसे समझा रहे हैं:

MySQL नेटवर्क कम्युनिकेशन कोड इस धारणा के तहत लिखा गया था कि प्रश्न हमेशा बहुत कम होते हैं, और इसलिए इसे सर्वर द्वारा एक चंक में भेजा और संसाधित किया जा सकता है, जिसे MySQL शब्दावली में एक पैकेट कहा जाता है । पैकेट को संग्रहीत करने के लिए सर्वर अस्थायी बफर के लिए मेमोरी आवंटित करता है, और यह इसे पूरी तरह से फिट करने के लिए पर्याप्त अनुरोध करता है। इस आर्किटेक्चर को सर्वर के मेमोरी से बाहर चलने से बचने के लिए एहतियात की आवश्यकता होती है --- पैकेट के आकार पर एक कैप, जिसे यह विकल्प पूरा करता है।

इस विकल्प के संबंध में रुचि का कोड sql / net_serv.cc में पाया जाता है । My_net_read () पर एक नज़र डालें , फिर my_real_read () पर कॉल का अनुसरण करें और net_realloc () पर विशेष ध्यान दें

यह चर कई स्ट्रिंग फंक्शन्स के परिणाम की लंबाई को भी सीमित करता है। विवरण के लिए sql / field.cc और sql / intem_strfunc.cc देखें।

यह संभवतः मैंने अब तक देखे गए max_allowed_packet का सबसे पूर्ण विवरण है। मैंने किताब से उन 3 पैराग्राफ को टाइप किया।


पोस्ट करने के लिए धन्यवाद। यह संकेत देता है कि "पैकेट" का अर्थ है "आईपी पैकेट।"
रंडोल्फ रिचर्डसन

बहुत बढ़िया जवाब। मुझे लगता है कि यह उतना ही करीब है जितना मैं एक वास्तविक उत्तर के लिए हो रहा हूं। (मुझे अभी भी पूरा यकीन है कि यह आईपी पैकेट्स का जिक्र नहीं है। यह कहीं भी आईपी का उल्लेख नहीं करता है, और मेरा मानना ​​है कि 65535 बाइट्स आमतौर पर खंडित आईपी पैकेटों के लिए वास्तविक दुनिया की सीमा है।)
प्लूटोर

1

प्रलेखन पूर्ण विवरण में इसे यहाँ बताता है:

"एक पैकेट या किसी भी उत्पन्न / मध्यवर्ती स्ट्रिंग का अधिकतम आकार। ..."

प्रलेखन भी BLOBs को संबोधित करने के लिए आगे बढ़ता है और यह कैसे उनके बीच संबंध स्थापित करता है।


यह वास्तव में मेरे सवाल का जवाब नहीं है। इस संदर्भ में एक पैकेट क्या है? क्या यह वास्तव में एक आईपी पैकेट है? क्या विकृत डेटा को पकड़ने के लिए एक साधारण बाइट सीमा से बेहतर तरीका नहीं है?
प्लूटोर

जब तक वे "पैकेट" को कुछ और होने के रूप में परिभाषित नहीं करते (जो वे प्रलेखन में नहीं करते हैं), तो यह उम्मीद करना उचित है कि "पैकेट" एक आईपी पैकेट को संदर्भित करता है।
Randolf रिचर्डसन

मुझे एक पुस्तक में परिभाषा मिली है। मैंने अपने उत्तर के रूप में उस पुस्तक का एक अंश जोड़ा।
रोलैंडमाइसीडीडीबीए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.