मध्यम यातायात के साथ Drupal 7 के लिए max_allowed_packet के लिए एक उचित मूल्य क्या है for


12

मुझे अपने ड्रुपल 7 साइट के लिए इस चर के लिए कुछ बॉल पार्क नंबर जानने की जरूरत है। मुझे हाल ही में एक "ड्रुपल" PDOException: SQLSTATE [08S01]: कम्युनिकेशन लिंक फेलियर: ५३ ९ "त्रुटि आई। मैं mysql का नौसिखिया हूं और साझा होस्टिंग का उपयोग कर रहा हूं। मुझे शायद व्यवस्थापक से इसे मेरे लिए घोषित करने की आवश्यकता है।

अग्रिम में धन्यवाद।


1
मेरा उत्तर इसके साथ मेरे अनुभव को दर्शाता है, लेकिन आपको dba.stackexchange.com पर उन लोगों से बेहतर प्रतिक्रिया मिल सकती है जो जीवित रहने के लिए MySQL को बनाए रखते हैं।
mpdonadio

जवाबों:


12

मैंने आपके पास सबसे बड़े BLOB के बारे में एक सवाल का दिलचस्प जवाब देखा। यहाँ वह कथन है जो मैंने ServerFault में देखा है: innodb_log_file_size और innodb_log_buffer_size संयुक्त आपके बड़े ब्लॉब ऑब्जेक्ट के दस गुना से बड़ा होना चाहिए यदि आपके पास बहुत बड़ा है

Nils-Anders Nøttseter से उस सर्वरफ़ॉल्ट पोस्ट के आधार पर , आपको तालिका को क्वेरी करना चाहिए और यह पता लगाना चाहिए कि BLOB सबसे बड़ी है, उस संख्या को 11 या अधिक से गुणा करें, और उस उत्तर का उपयोग आगे बढ़ने वाले max_allowed_packet के रूप में करें ।

यह मज़ेदार है कि मैंने एक और प्रश्न को संबोधित किया जहां मैंने सुझाव दिया कि समस्या को उम्मीद से हल करने के लिए मैक्सिमम पैकेट को आकार दें

चेतावनी

पुस्तक के अनुसार

TheBookImage

यहाँ 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

अधिकतम अनुमत पैकेट भी सम्मिलित विवरणों के आकार को प्रभावित नहीं करेगा?
ब्यूटिक बटुक

@ButtleButkus बेशक। यही कारण है कि बड़े MySQL पैकेट INSERTs के लिए अच्छा है। कृपया ध्यान दें कि 1G, max_allowed_packet का अधिकतम आकार है। यह भी ध्यान दें कि 256M के लिए max_allowed_packet को सेट करना 256M अपफ्रंट को आवंटित नहीं करता है। Dev.mysql.com/doc/refman/5.6/en/… के अनुसार , mysqld जो भी net_buffer_length आरंभिक MySQL पैकेट आकार के रूप में आवंटित करता है। पैकेट धीरे-धीरे max_allowed_packet द्वारा निर्धारित आकार में बढ़ता है। इसलिए, एक बड़ा max_allowed_packet सेट करना ठीक है। INSERT आपको इसके लिए प्यार करेंगे।
रोलैंडमाइसीडीडीबीए

मैंने इसे कभी भी उस आकार के करीब सेट नहीं किया है, भले ही हमारे पास 32G रैम के साथ एक दो मशीनें हों। एक एप्लिकेशन ने इस पर चुटकी ली, हालांकि, और मैंने इसे डिफ़ॉल्ट (1M?) से 32M तक बढ़ा दिया और यह काम कर गया। शायद मैं इसे और बढ़ा दूंगा, अगर यह चोट नहीं पहुंचाएगा। लेकिन, क्या अनुप्रयोगों को उस सीमा तक टालने के लिए अधिकतम_चार्ज_पैकेट की जांच करनी चाहिए और आवेषण को विखंडू में तोड़ना चाहिए? उस दृष्टिकोण के लिए नकारात्मक क्या है? शायद मुझे dba स्टैक साइट पर उस प्रश्न को पोस्ट करना चाहिए।
बुटेल बटुकस

क्या आप इस बारे में थोड़ा और विस्तार कर सकते हैं कि हमें 11 से गुणा क्यों करना चाहिए? लिंक्ड पोस्ट मासूम बफ़र्स के बारे में है - यह पैकेट के आकार से कैसे संबंधित है?
SystemParadox

4

Drupal के डेटाबेस सर्वर आवश्यकताएँ पृष्ठ से लिया गया :

कम से कम 16M तक सिस्टम वेरिएबल max_allowed_packet सेट करना आवश्यक हो सकता है। कुछ सस्ती होस्टिंग योजनाएं इस मूल्य को बहुत कम निर्धारित करती हैं (MySQL डिफ़ॉल्ट केवल 1M है)। उस स्थिति में, आपको एक बेहतर होस्टिंग योजना चुनने की आवश्यकता हो सकती है। Drupal 5 के लिए 1M का मान पर्याप्त हो सकता है।

साझा होस्टिंग पर एक साइट के लिए ठीक होना चाहिए।


1
वाह!! Drupal सर्वर आवश्यकताओं आधिकारिक तौर पर यह 16M है कहना !! मुझे उस बारे में कभी जानकारी नहीं थी। अगली बार इसका ध्यान रखेंगे। इस जानकारी को साझा करने के लिए बहुत बहुत धन्यवाद। काश मैं इसे सबसे अच्छा जवाब चिह्नित कर पाता !!
शिवाम्स

2

इसे सेट करना थोड़ा मुश्किल हो सकता है max_allowed_packet। मुझे उस मूल्य की गणना करने के लिए अभी तक एक विधि नहीं है। आमतौर पर, मैं एक डेटाबेस स्नैपशॉट को पुनर्स्थापित करने का प्रयास करते समय उसमें दौड़ता हूं जिसमें {cache}तालिकाओं से पंक्तियाँ शामिल होती हैं ।

जब मुझे यह समस्या होगी, तो मैं 4M और 8M के बीच का मान चुनूंगा। जब तक यह रुकता है मैं मूल्य को उछालता रहता हूं। हालाँकि, मुझे नहीं पता कि एक साझा होस्ट आपके लिए इस मान को बदलेगा या नहीं।

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