मैं लाइव ड्रूपल 7 साइट पर प्रति घंटे कितने नोड अपलोड कर सकता हूं और गतिरोध से बच सकता हूं?


9

बहुत पहले नहीं मैंने यहां गतिरोध के बारे में लिखा था: PDOException: SQLSTATE [40001]: सीरियलाइज़ेशन विफलता: 1213 डेडलॉक जब लॉक पाने की कोशिश कर रहा था;

मेरी विकास टीम ने जो कुछ भी करने की कोशिश की, उसके बावजूद भी हमें इस तरह की त्रुटियाँ हैं:

PDOException: SQLSTATE [40001]: सीरियलाइज़ेशन विफलता: 1213 डेडलॉक जब लॉक पाने की कोशिश कर रहा था; लेनदेन को पुनः आरंभ करने का प्रयास करें: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (: db_insert_placeholder_0: db_insert_placeholder__1: db_insert_placeholder_3: db_insert_placeholder_3,: db_in_in Array ([: db_insert_placeholder_0] => 1059 [: db_insert_placeholder_1] => 1059 [: db_insert_placeholder_3] => 0 [: db_insert_placeholder_3] => cck: field_item_location: 105b9 [: db_inser_placeholder_3] /var/www/website.com/sites/all/modules/location/location.module)।

उस उदाहरण में विशिष्ट तालिका के बावजूद, हमें यह त्रुटि अन्य तालिकाओं पर मिलती है।

यहाँ मेरी स्थिति है। मैंने एक बड़ा विश्वविद्यालय प्रोजेक्ट लिया है। किसी भी समय 50,000 परिसर निवासी होते हैं जो प्रतिदिन प्रणाली का उपयोग करते हैं। उस के अलावा, मैं मैन्युअल रूप से और कस्टम मॉड्यूल कोड (पुराने विश्वविद्यालय डेटा से माइग्रेशन) के माध्यम से इस नई Drupal 7 साइट के लिए सामग्री के 100s विभिन्न प्रकार के प्रवास कर रहा हूं।

यह त्रुटि हमें मार रही है, उस बिंदु पर जहां हम काम के अंतिम वर्षों को खत्म करने के लिए लगभग तैयार हैं और कुछ और के साथ जाते हैं अगर ड्रुपल इस प्रकार के भार को संभाल नहीं सकता है।

लेकिन वह कमोबेश मेरा सवाल है - द्रुपाल इस तरह के भार को कैसे संभाल सकता है? मैं इस गतिविधि को संचालित करने में सक्षम होने के लिए अपने कार्य प्रवाह को कैसे व्यवस्थित कर सकता हूं? क्या यह ड्रुपल इश्यू है? एक डेटाबेस समस्या?

विशेष रूप से, मैं Ubuntu, LAMP स्टैक 16GB RAM चला रहा हूं। मैं किसी भी सुझाव के लिए खुला हूं, चाहे वह Drupal से संबंधित हो, डेटाबेस से संबंधित हो, सर्वर से संबंधित हो, या Drupal की क्षमताओं के भीतर काम करने के लिए एक अलग कार्य प्रवाह हो, इसलिए यदि आप इस बहुत सी गतिविधि के साथ अनुभव करते हैं, तो कुछ भी सुझाव देने के लिए स्वतंत्र महसूस करें।


वहाँ बड़ी डाटासेट आयात करने के बारे में एक लेख है evolvingweb.ca/story/...
kalabro

उसके लिये आपका धन्यवाद। यह देखना बहुत उत्साहजनक है कि डेटा के वॉल्यूम को वास्तव में लगभग तुरंत आयात किया जा सकता है। हालांकि, नोड रूपों के माध्यम से अपने स्वयं के खातों के माध्यम से पोस्ट करने वाले व्यक्तिगत उपयोगकर्ताओं के मुद्दे के बारे में क्या? जैसा कि मैंने इस समस्या में और खुदाई की, मेरे सिर में बयानबाजी के सवाल बढ़ते हैं, "क्या ड्रुपल बहुत अधिक लाइव ट्रैफ़िक संभाल सकता है? यदि नहीं, तो फिर क्या है?" आयातों के अलावा, हमारे पास लगभग 20 की एक टीम है जो अपने खातों के माध्यम से सामान्य रूप से सामग्री जोड़ रहे हैं। क्या Drupal 'नोड सेव कर सकता है' वास्तव में केवल एक साथ 20 उपयोगकर्ता एक बार में डेटा जोड़ रहा है?
ब्लू 928

हमने MySQL और PostgreSQL का उपयोग करते हुए Apache JMeter के साथ हमारी Drupal साइट का परीक्षण किया। MySQL के लिए हमारे परिणाम लगभग 20 नोड थे। PostgreSQL के लिए परिणाम बहुत बेहतर थे।
कलाब्रो

जवाबों:


5

मैं स्टैनफोर्ड विश्वविद्यालय के लिए काम करता हूं और इसी तरह की चीजें करता रहा हूं। हमें नियमित रूप से लगातार 100,000 से अधिक नोड्स लोड करना पड़ता है। हम 2 वर्षों से अपने स्वयं के कस्टम लोडिंग कोड पर काम कर रहे हैं, अब pcntl_fork का उपयोग करते हुए प्रक्रिया को काफी तेज कर सकते हैं। केवल एक चीज जिसे आपको याद रखना है, वह है कि कांटा लगाने से पहले सभी सॉकेट कनेक्शन को बंद करना। उदाहरण के लिए आपको आपको mysql कनेक्शन, मेमेचे कनेक्शन और यहां तक ​​कि मोंगो कनेक्शन बंद करना होगा। जब कोई मौजूद नहीं होगा, तो Drupal अपने आप नए कनेक्शन बनाएगा। जहां तक ​​गतिरोध की समस्या है, हम उस मुद्दे को डालकर ठीक करने में सक्षम थे innodb_locks_unsafe_for_binlog = 1


क्या आप कस्टम कोड के साथ बैच में या drupal के एपीआई कार्यों में से कुछ का उपयोग करके लोड कर रहे हैं जैसे कि नोड_सैव? या माइग्रेशन टाइप मॉड्यूल? वह कोड भी है जिसे आपने सार्वजनिक दृश्य के लिए उपलब्ध बताया है? यह देखना अच्छा होगा कि pcntl_fork को ड्रुपल के साथ एकीकृत किया गया है ताकि आप देख सकें कि आप लोगों ने इस बाधा को पार कर लिया है। बिनलोग टिप के लिए धन्यवाद!
नीला 928

2

उत्तर है: अपनी MySQL my.cnf फ़ाइल को सही ढंग से कॉन्फ़िगर करें।

एक हफ्ते से अधिक शोध के बाद, मैंने पाया है कि Drupal 7 वास्तव में इस समवर्ती इनपुट ट्रैफ़िक को संभाल सकता है।

ये डेडलॉक PDOException MySQL my.cnf फाइल से संबंधित थी जिसे सही तरीके से ऑप्टिमाइज़ नहीं किया गया था। Drupal उच्च प्रदर्शन समूह और अन्य स्रोतों से मदद के साथ, हमारी टीम ने MySQL के लिए नई कॉन्फ़िगरेशन सेटिंग्स लागू करने के बाद एक भी डेडलॉक नहीं हुआ है। हमने 500 से अधिक वर्तमान उपयोगकर्ताओं को बिना किसी समस्या के सामग्री सहेजने के लिए अपनी बैच स्क्रिप्ट का परीक्षण किया। धागे को यहां देखें।

http://groups.drupal.org/node/260938

विशेष रूप से, Dalin ने सर्वर स्पेक्स और टेबल प्रकारों के आधार पर बेस कॉन्फ़िगरेशन फ़ाइल प्राप्त करने के लिए विज़ार्ड का उपयोग करने का सुझाव दिया। इसका उपयोग करने के बाद, आगे भी बिना ट्विक किए, गतिरोध बंद हो गया। यदि आप इसे आज़माना चाहते हैं, तो यहां विज़ार्ड का लिंक दिया गया है: https://tools.percona.com/wizard

अगर मेरी कोई मददगार होगी तो मुझे my.cnf फाइल पोस्ट करने में खुशी होगी।

हालाँकि डेडलॉक समस्या अब कोई समस्या नहीं है, अब हमें यह त्रुटि बहुत बार मिल रही है:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 
1305 SAVEPOINT savepoint_1 does not exist: ROLLBACK TO SAVEPOINT savepoint_1; 
Array ( ) in file_usage_add() (line 661 of /var/www/website.com/includes/file.inc).

यह एक mysql विन्यास मुद्दा भी हो सकता है?


हम स्वयं उस त्रुटि को देखना शुरू कर रहे हैं। क्या आपको कभी अपने प्रश्न का उत्तर मिला?
18

1

http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html इस mysql पेज से पता चलता है कि जब आप डेडलॉक का सामना करते हैं तो क्या करना चाहिए।

ठीक से अपने mysql विन्यास ट्यूनिंग से आप इस मुद्दे को हल करने में मदद मिलेगी।

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