प्रदर्शन शुरू होने से पहले एक MySQL डेटाबेस कितना बड़ा हो सकता है


303

किस बिंदु पर MySQL डेटाबेस प्रदर्शन कम करने लगता है?

  • क्या भौतिक डेटाबेस आकार मायने रखता है?
  • क्या रिकॉर्ड की संख्या मायने रखती है?
  • क्या कोई प्रदर्शन गिरावट रैखिक या घातीय है?

मेरे पास एक बड़ा डेटाबेस होने का विश्वास है, जिसमें लगभग 15M रिकॉर्ड हैं जो लगभग 2GB तक लगते हैं। इन नंबरों के आधार पर, क्या मेरे लिए डेटा को साफ करने के लिए कोई प्रोत्साहन है, या क्या मैं इसे कुछ और वर्षों तक स्केलिंग जारी रखने की अनुमति देने के लिए सुरक्षित हूं?

जवाबों:


204

भौतिक डेटाबेस आकार कोई फर्क नहीं पड़ता। रिकॉर्ड की संख्या कोई फर्क नहीं पड़ता।

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

मेरे पास मेरा 10GB तक का कनेक्शन है, केवल मध्यम संख्या में कनेक्शन के साथ और यह अनुरोधों को ठीक करता है।

मैं सबसे पहले आपके अनुक्रमित पर ध्यान केंद्रित करूंगा, फिर आपके ओएस पर एक सर्वर व्यवस्थापक को देखना होगा, और अगर यह सब मदद नहीं करता है तो मास्टर / दास कॉन्फ़िगरेशन को लागू करने का समय हो सकता है।


अगर डेटाबेस का आकार 7 जीबी से अधिक है तो क्या होगा। इस तथ्य में समय सीमा का प्रभाव नहीं पड़ता है?
हैकर

89

सामान्य तौर पर यह एक बहुत ही सूक्ष्म मुद्दा है और जो भी नहीं है। मैं आपको mysqlperformanceblog.com और उच्च प्रदर्शन MySQL पढ़ने के लिए प्रोत्साहित करता हूं । मुझे वास्तव में लगता है कि इसके लिए कोई सामान्य उत्तर नहीं है।

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

आपके टेबल कैसे दिखते हैं, इसके आधार पर रिकॉर्ड की संख्या मायने रखती है। यह एक अंतर है कि बहुत सारे वर्चर्स फील्ड या केवल कुछ जोड़े या लॉन्ग हैं।

डेटाबेस का भौतिक आकार भी मायने रखता है: उदाहरण के लिए, बैकअप के बारे में सोचें। आपके इंजन के आधार पर, आपकी भौतिक db फाइलें बढ़ती हैं, लेकिन उदाहरण के लिए, innodb के साथ सिकुड़ें नहीं। तो बहुत सारी पंक्तियों को हटाने से आपकी भौतिक फ़ाइलों को सिकोड़ने में मदद नहीं मिलती है।

इस मुद्दे पर बहुत कुछ है और बहुत सारे मामलों में शैतान विवरण में है।


45

डेटाबेस का आकार मायने रखता है । यदि आपके पास एक लाख से अधिक रिकॉर्ड के साथ एक से अधिक तालिका है, तो प्रदर्शन वास्तव में नीचा दिखाना शुरू कर देता है। रिकॉर्ड की संख्या निश्चित रूप से प्रदर्शन को प्रभावित करती है: MySQL बड़े तालिकाओं के साथ धीमा हो सकता है । यदि आप एक लाख रिकॉर्ड मारते हैं, तो आपको प्रदर्शन समस्याएं मिलेंगी यदि सूचकांकों को सही नहीं किया जाता है (उदाहरण के लिए "WHERE स्टेटमेंट्स में फ़ील्ड के लिए कोई संकेत नहीं" या "जॉइन में स्थितियां")। यदि आप 10 मिलियन रिकॉर्ड मारते हैं, तो आपको अपने सभी सूचकांकों के सही होने पर भी प्रदर्शन की समस्याएं होने लगेंगी। हार्डवेयर उन्नयन - अधिक मेमोरी और अधिक प्रोसेसर शक्ति, विशेष रूप से मेमोरी को जोड़ना - अक्सर प्रदर्शन को बढ़ाकर सबसे गंभीर समस्याओं को कम करने में मदद करता है, कम से कम एक निश्चित डिग्री तक। उदाहरण के लिएबेसकैंप डेटाबेस सर्वर के लिए 37 सिग्नल 32 जीबी रैम से 128 जीबी रैम तक चले गए


23

मैं आपके अनुक्रमित पर सबसे पहले ध्यान केंद्रित करूंगा, जैसे कि आपके ओएस पर एक सर्वर व्यवस्थापक की नज़र है, और यदि यह सब मदद नहीं करता है तो यह मास्टर / दास कॉन्फ़िगरेशन के लिए समय हो सकता है।

यह सच है। एक और चीज जो आमतौर पर काम करती है, वह है केवल बार-बार काम करने वाले डेटा की मात्रा को कम करना। यदि आपके पास "पुराना डेटा" और "नया डेटा" है और आपके 99% प्रश्न नए डेटा के साथ काम करते हैं, तो सभी पुराने डेटा को किसी अन्य तालिका में स्थानांतरित करें - और इसे न देखें;)

-> विभाजन पर एक नजर ।


21

2GB और लगभग 15M रिकॉर्ड एक बहुत छोटा डेटाबेस है - मैंने एक पेंटियम III (!) पर बहुत बड़े रन बनाए हैं और सब कुछ अभी भी बहुत तेजी से चला है .. अगर आपका धीमा है तो यह डेटाबेस / एप्लिकेशन डिज़ाइन समस्या है, न कि mysql एक।


20

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

2 जीबी वास्तव में "बड़े" डेटाबेस के रूप में नहीं गिना जाता है - यह एक मध्यम आकार का अधिक है।


11

मैं वर्तमान में अमेज़ॅन के क्लाउड इन्फ्रास्ट्रक्चर पर एक MySQL डेटाबेस का प्रबंधन कर रहा हूं जो 160 जीबी तक बढ़ गया है। क्वेरी का प्रदर्शन ठीक है। एक दुःस्वप्न बन गया है बैकअप, पुनर्स्थापना, दासों को जोड़ना, या कुछ और जो पूरे डेटासेट के साथ काम करता है, या यहां तक ​​कि बड़े तालिकाओं पर डीडीएल भी। डंप फ़ाइल का साफ आयात करना समस्याग्रस्त हो गया है। स्वचालित रूप से प्रक्रिया को स्थिर बनाने के लिए, प्रदर्शन पर स्थिरता को प्राथमिकता देने के लिए आवश्यक विभिन्न विकल्प। यदि हमें कभी SQL बैकअप का उपयोग करते हुए किसी आपदा से उबरना पड़ा, तो हम दिनों तक नीचे रहेंगे।

क्षैतिज रूप से स्केलिंग एसक्यूएल भी बहुत दर्दनाक है, और ज्यादातर मामलों में इसका उपयोग उन तरीकों से किया जाता है जो आपने पहले अपने डेटा को एसक्यूएल में डालने के लिए नहीं चुना था। शार्द, गुलाम, मल्टी-मास्टर, एट अल पढ़ते हैं, वे सभी वास्तव में चमकदार समाधान हैं जो आपके द्वारा कभी भी डीबी के साथ किए जाने वाले सभी चीजों में जटिलता जोड़ते हैं, और उनमें से एक समस्या को हल नहीं करता है; केवल इसे कुछ तरीकों से कम करता है। जब आप अपने आकार के कुछ डेटा को MySQL (या वास्तव में किसी भी SQL) से बाहर निकलते हुए देखना चाहेंगे, जब आप एक ऐसे आकार के डेटासेट को प्राप्त करना शुरू करेंगे, जहाँ इस प्रकार की चीजें एक मुद्दा बन जाती हैं।


इसे MySQL से बाहर ले जाएं .. किसी अन्य MySQL में?
पेसियर

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

10

कॉम्प्लेक्स जॉइन के लिए भी देखें। लेनदेन की मात्रा के अलावा लेन-देन की जटिलता एक बड़ा कारक हो सकती है।

भारी प्रश्नों को फिर से दर्ज करना कभी-कभी बड़े प्रदर्शन को बढ़ावा देता है।


9

मुझे एक बार एक mysql को देखने के लिए बुलाया गया था जिसने "काम करना बंद कर दिया था"। मुझे पता चला कि डीबी फाइलें एनएफएस 2 और अधिकतम 2 जीबी के आकार वाले एक नेटवर्क उपकरण फाइलर पर रहती थीं। और निश्चित रूप से पर्याप्त है, जिस टेबल ने लेनदेन स्वीकार करना बंद कर दिया था वह डिस्क पर 2GB था। लेकिन परफॉर्मेंस कर्व के संबंध में मुझे बताया गया है कि यह तब तक एक विजेता की तरह काम कर रहा था जब तक कि यह बिल्कुल काम नहीं करता! यह अनुभव हमेशा मेरे लिए एक अच्छे अनुस्मारक के रूप में कार्य करता है कि आप जिस पर स्वाभाविक रूप से संदेह करते हैं उसके ऊपर और नीचे हमेशा आयाम होते हैं।


3
हालांकि यह सच है कि स्केलिंग के मुद्दे को समग्र रूप से देखा जाता है, लेकिन यह पूरी तरह से असंबंधित है कि MySQL खुद को कैसे मापता है।
रेयान

9

एक बिंदु पर विचार भी दिन के लिए प्रणाली और डेटा का उद्देश्य है।

उदाहरण के लिए, कारों की जीपीएस मॉनिटरिंग वाली प्रणाली के लिए पिछले महीनों में कार के पदों से प्रासंगिक क्वेरी डेटा नहीं है।

इसलिए डेटा को संभव परामर्श के लिए अन्य ऐतिहासिक तालिकाओं में पारित किया जा सकता है और दिन के प्रश्नों के निष्पादन समय को कम कर सकता है।


5

यदि डेटाबेस ठीक से डिज़ाइन नहीं किया गया है तो प्रदर्शन कुछ हज़ार पंक्तियों के मामले में नीचा दिखा सकता है।

यदि आपके पास उचित अनुक्रमित हैं, तो उचित इंजनों का उपयोग करें (MyISAM का उपयोग न करें जहां कई DMLs अपेक्षित हैं), विभाजन का उपयोग करें, उपयोग के आधार पर सही मेमोरी आवंटित करें और निश्चित रूप से अच्छा सर्वर कॉन्फ़िगरेशन है, MySQL भी टेराबाइट्स में डेटा को संभाल सकता है!

डेटाबेस प्रदर्शन को बेहतर बनाने के लिए हमेशा तरीके होते हैं।


3

यह आपकी क्वेरी और सत्यापन पर निर्भर करता है।

उदाहरण के लिए, मैंने 100 000 दवाओं की एक तालिका के साथ काम किया, जिसमें एक कॉलम जेनेरिक नाम है, जहां उस तालिका में प्रत्येक के लिए 15 से अधिक वर्ण हैं। मैंने दो तालिकाओं के बीच दवाओं के जेनेरिक नाम की तुलना करने के लिए एक प्रश्न रखा। क्वेरी लेता है चलाने के लिए और अधिक मिनट। वही, अगर आप ड्रग इंडेक्स का उपयोग करके दवाओं की तुलना करते हैं, तो एक आईडी कॉलम (जैसा कि ऊपर कहा गया है) का उपयोग करते हुए, इसमें केवल कुछ सेकंड लगते हैं।


1

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


0

नहीं, यह वास्तव में मायने नहीं रखता। MySQL की गति लगभग 7 मिलियन पंक्तियां प्रति सेकंड है। तो आप इसे काफी छोटा कर सकते हैं


क्या आपके पास इस पर कोई स्रोत है?
शोबी

आइए यह मत भूलो कि प्रति सेकंड सम्मिलन आपके पास किस प्रकार की मशीन (सीपीयू पावर और डिस्क की गति) पर निर्भर है। मेरे अनौपचारिक परीक्षण में, मैंने गंदे लैपटॉप पर प्रति सेकंड 100-ईश आवेषण और अधिक शक्तिशाली, एसएसडी-आधारित लैपटॉप पर प्रति सेकंड 2000 आवेषण को देखा। दूसरे शब्दों में, यह एक काल्पनिक और अविश्वसनीय मीट्रिक है।
अंकुश 981

0

क्वेरी प्रदर्शन मुख्य रूप से स्कैन करने के लिए आवश्यक रिकॉर्ड की संख्या पर निर्भर करता है, इंडेक्स इसमें एक उच्च भूमिका निभाता है और इंडेक्स डेटा का आकार पंक्तियों की संख्या और इंडेक्स की संख्या के लिए आनुपातिक है।

पूर्ण मान के साथ अनुक्रमित फ़ील्ड स्थितियों के साथ क्वेरीज़ को आम तौर पर 1ms में लौटा दिया जाएगा, लेकिन start_with, IN, बीच में, जाहिर है कि शर्तों में स्कैन करने के लिए अधिक रिकॉर्ड के साथ अधिक समय लग सकता है।

इसके अलावा, आपको डीडीएल के साथ बहुत सारे रखरखाव के मुद्दों का सामना करना पड़ेगा, जैसे ALTER, DROP एक लाइव इंडेक्स या नए कॉलम को जोड़ने के लिए अधिक लाइव ट्रैफ़िक के साथ धीमा और कठिन होगा।

आम तौर पर डेटाबेस को आवश्यकतानुसार कई समूहों में क्लस्टर करने की सलाह दी जाती है (500 जीबी एक सामान्य बेंचमार्क होगा, जैसा कि दूसरों ने कहा है कि यह कई कारकों पर निर्भर करता है और उपयोग के मामलों के आधार पर भिन्न हो सकता है) जिस तरह से यह बेहतर अलगाव देता है और स्केल को स्वतंत्रता देता है क्लस्टर (बी 2 बी के मामले में अधिक उपयुक्त)

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