SQL प्रदर्शन को बेहतर बनाने के लिए, क्यों न केवल तेज हार्ड डिस्क रखने के बजाय बहुत सारे RAM लगाए जाएं?


31

लोग मुझे बता रहे हैं कि SQL सर्वर के प्रदर्शन को बेहतर बनाने के लिए, RAID 5, आदि के साथ सबसे तेज़ हार्ड डिस्क खरीदें।

इसलिए मैं सोच रहा था, RAID 5 और सुपर-डुपर फास्ट हार्ड डिस्क (जो कि वैसे सस्ता नहीं है) के लिए सभी पैसे खर्च करने के बजाय, बस टन रैम क्यों नहीं? हम जानते हैं कि एक SQL सर्वर डेटाबेस को मेमोरी में लोड करता है। मेमोरी किसी भी हार्ड डिस्क की तुलना में अधिक तेज़ है।

एक सर्वर पर 100 जीबी रैम की तरह सामान क्यों नहीं? तो बस एक नियमित SCSI हार्ड डिस्क का उपयोग करें RAID 1. क्या यह बहुत सस्ता और तेज नहीं होगा?


33
जो कोई आपको बता रहा है RAID 5 कोई सुराग नहीं है। यदि आप वास्तव में प्रदर्शन के बारे में परवाह करते हैं, तो RAID 10
एमडीएमरा

5
ACID में D क्या है? आखिरकार, आपको सामान लिखने की आवश्यकता होगी।
एडम मस्क

जवाबों:


51

आपका विश्लेषण ठीक है - एक बिंदु तक - इसमें यह पूरी तरह से चीजों को तेज कर देगा। हालांकि आपको अभी भी कुछ अन्य मुद्दों के लिए जवाब देना होगा:

  1. हर कोई पर्याप्त स्मृति बर्दाश्त नहीं कर सकता; जब आपके पास डेटा के कई टेराबाइट्स होते हैं, तो आपको इसे कुछ समय डिस्क पर रखना होगा। यदि आपके पास ज्यादा डेटा नहीं है, तो कुछ भी काफी तेजी से होता है।

  2. अपने डेटाबेस के लिए प्रदर्शन लिखें अभी भी डिस्क से बाध्य होने जा रहा है, ताकि आप यह वादा रख सकें कि डेटा वास्तव में संग्रहीत किया गया था।

यदि आपके पास एक छोटा डेटा सेट है, या इसे डिस्क पर जारी रखने की आवश्यकता नहीं है, तो आपके विचार में कुछ भी गलत नहीं है। VoltDB जैसे उपकरण RDBMS कार्यान्वयन में पुरानी मान्यताओं को ओवरहेड्स को कम करने के लिए काम कर रहे हैं, जो शुद्ध-स्मृति प्रदर्शन में बाधा डालते हैं।

(एक तरफ के रूप में, डेटाबेस प्रदर्शन के लिए आपको RAID -5 का उपयोग करने के लिए कहने वाले लोग शायद इस विषय पर सुनने के लिए महान लोग नहीं हैं, क्योंकि यह लगभग कभी भी सबसे अच्छा विकल्प नहीं है - इसका प्रदर्शन अच्छा है, लेकिन बुरा प्रदर्शन है, और लिखता है लगभग हमेशा उत्पादन की कमी होती है - क्योंकि आप अधिकांश रीड-साइड प्रदर्शन समस्याओं को हल करने के लिए रैम को कैशिंग में फेंक सकते हैं।)


1
सामान्य उपयोगकर्ता हमेशा पढ़ने के मुद्दों की शिकायत करते हैं। लिखने के मुद्दों पर शायद ही कभी
उपयोगकर्ता 1034912

2
@ user1034912 - उपयोग के मामले और उपयोगकर्ताओं पर भिन्न होता है। आम तौर पर, लिखने के प्रदर्शन के मुद्दों को हल करने के लिए कठिन होते हैं, और समग्र प्रणाली के प्रदर्शन पर अधिक से अधिक अवरोधों को समाप्त करते हैं, जिसका अर्थ है कि जब आप पढ़ी गई समस्या को हल करते हैं तो वे लेखन समस्या के बारे में शिकायत करना शुरू कर देते हैं ...
डैनियल पिटमैन

2
@ user1034912, उपयोगकर्ता आमतौर पर लिखने में देरी नहीं देखते हैं, इसलिए उनसे अनजान हैं। अधिकांश उपयोगकर्ता जो पढ़ने में देरी के रूप में देखते हैं, वे धीमी क्वेरी के कारण होते हैं, धीमे डिस्क के नहीं।
जॉन गार्डनियर्स 3

एक उत्कृष्ट जवाब! @ user1034912 वे पढ़ने के मुद्दों की शिकायत कर सकते हैं जो निश्चित रूप से खराब लेखन-प्रदर्शन (और खराब-स्केलिंग संगामिति कोड) के प्रभाव पर दस्तक दे सकते हैं।
एलेक्स

RAID5 रिलेशनल डेटाबेस में: en.wikipedia.org/wiki/… - मैं यह नहीं कह रहा कि आप गलत हैं, लेकिन पारंपरिक ज्ञान पुरानी जानकारी पर आधारित हो सकता है। व्यक्तिगत रूप से, मैं अब RAID5 का उपयोग नहीं करता; मैं RAID6 का उपयोग करता हूं जब तक कि यह बहुत धीमा न हो।
gWaldo

11

लघु संस्करण: कार्य सेट आकार पर विचार करें। लंबा संस्करण: आपका डेटा कितना बड़ा है? यदि यह एक आधुनिक सर्वर की स्मृति में फिट हो सकता है, तो हाँ, आप बिल्कुल सही हैं। दुर्भाग्य से, सबसे बड़ा Xeon अभी 2TB RAM को संबोधित कर सकता है, और यह किसी भी अधिक डेटासेट का बड़ा नहीं है। यदि आप रैम में अपना पूरा काम करने के लिए घर में बड़ी मशीन नहीं खरीद सकते हैं, तो आपको अपने बटुए से नहीं, बल्कि अपने मस्तिष्क के साथ समस्याओं को हल करने के लिए मजबूर किया जाता है।


अंतिम वाक्य के लिए +1 बेहद उद्धृत करने योग्य है। : डी
pkoch

8

यदि आप गति चाहते हैं:

  • रैम को बढ़ाएं ताकि कम से कम अक्सर उपयोग किए जाने वाले इंडेक्स पूरी तरह से रैम में फिट हो सकें (उदाहरण के लिए, मैं जिस सिस्टम पर काम करता हूं, 350 जीबी डेटाबेस के लिए 32 जीबी रैम काफी है, क्योंकि इंडेक्स वही हैं जो आपको रैम में चाहिए, कच्चा डेटा नहीं)
  • किसी भी डिस्क के साथ RAID10 का उपयोग करें (तेज डिस्क बेहतर हैं)
  • RAID5 से बचें
  • स्प्लिट mdf, ldf और अस्थायी डीबी असतत स्पिंडल सेट पर (उदाहरण: अपने स्वयं के RAID1 सेट पर tempdb, अपने स्वयं के RAID1 या RAID10 स्पिंडल सेट पर ldf, कम से कम कुल डिस्क के साथ RAID 10 सेट पर mdf)

उन चरणों का पालन करें, और SQL सर्वर उड़ जाएगा।

फिर यदि आप चाहें, तो अधिक रैम जोड़ें ... लेकिन ऊपर पहले करें, और आप अच्छी तरह से पा सकते हैं कि आप कर रहे हैं।


2

रैम नई डिस्क है, डिस्क नया टेप है।

में http://www.tbray.org/ongoing/When/200x/2006/05/24/On-Grids । ध्यान दें कि छह साल पहले था। हां, हमारे पास डेटाबेस सिस्टम हैं जो पूरे डेटासेट को रैम में रखने के लिए (और कोशिश करते हैं) डिस्क का उपयोग करने के बजाय कई मशीनों पर शार्प करते हैं क्योंकि डिस्क किसी भी तरह से धीमी है। आपको डेटासेट को डिस्क से लिखने की जरूरत है लेकिन जैसा कि ऊपर दिए गए मोटो में है, वह ऑनलाइन ऑपरेशन की तुलना में बैकग्राउंड बैकअप टास्क के समान है। स्थायित्व इन डेटाबेस के साथ केवल लॉग के माध्यम से प्राप्त किया जाता है (मैं MongoDB और Redis सोच रहा हूं लेकिन टन अधिक हैं)।


4
-1 क्योंकि यह सामान जितना अच्छा है, यह वास्तव में अधिकांश ऐप्स या हम में से अधिकांश के लिए सुलभ या उपयुक्त नहीं है। 500 जीबी तक के डेटा (या इससे भी अधिक) के लिए, आपको केवल दो SQL सर्वर (प्राथमिक और बैकअप) की आवश्यकता होती है, और आपके पास सैकड़ों या हजारों उपयोगकर्ताओं के लिए सामान्य टूल का उपयोग करके वास्तव में तेज़ है। हममें से बहुत कम लोगों को सैकड़ों हजारों समवर्ती उपयोगकर्ताओं या कई डेटा केंद्रों के पैमाने की आवश्यकता होती है, इसलिए आपके प्रस्तावित दृष्टिकोण की जटिलता हममें से अधिकांश के लिए लाभ को पछाड़ देती है। IOW: वर्टिकल स्केलिंग उन सभी के लिए आसान, सस्ता और प्रभावी है जो फेसबुक या गूगल नहीं हैं।
जोन्सोम पुनः स्थापित मोनिका

1

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

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

इस विषय पर कुछ और पढ़ने के लिए, मैं अकादमिक पेपर द एंड ऑफ ए आर्किटेक्चरल एरा (इट्स टाइम फॉर ए कंप्लीट रिवाइराईट) की सिफारिश करता हूं । यह एक मुश्किल पढ़ा नहीं है।

यह स्पष्ट नहीं है कि यह प्रश्न विशेष रूप से SQL सर्वर के बारे में था। मूल पोस्टर को यह स्पष्ट करना चाहिए।

डैनियल पिटमैन ने लिखा:

यदि आपके पास एक छोटा डेटा सेट है, या इसे डिस्क पर जारी रखने की आवश्यकता नहीं है, तो आपके विचार से कुछ भी गलत नहीं है>। VoltDB जैसे उपकरण RDBMS कार्यान्वयन में पुरानी धारणाओं को कम करने वाले ओवरहेड्स को कम करने के लिए काम कर रहे हैं, जो शुद्ध-इन-मेमोरी प्रदर्शन को बाधित करते हैं।

RDBMS कार्यान्वयन में पुरानी मान्यताओं से ओवरहेड्स को कम करना , वोल्टीडीबी का डिज़ाइन लक्ष्य था , लेकिन यह डेटा आकार पर कोई वास्तु सीमा के साथ क्षैतिज रूप से स्केल करता है, और यह स्नैपशॉटिंग और कमांड-लॉगिंग का उपयोग करके पूर्ण स्थायित्व के लिए डिस्क के लिए जारी रह सकता है।


0

यदि आप अपने रैम के कम से कम गर्म हिस्से को रखने के लिए पर्याप्त रैम वाला सर्वर प्राप्त कर सकते हैं, तो आप ठीक हो जाएंगे। इसके अलावा, RAID 1 और 5 आपके डेटा को व्यवस्थित करने का सबसे तेज़ तरीका नहीं है - RAID 0 तेज है, लेकिन, फिर, आपको एक फ़ाइल सिस्टम विफलता के उच्च बाधाओं पर विचार करना होगा जो आपके डेटाबेस को मिटा देता है - होने वाली अच्छी बात नहीं । आप RAID 1 या RAID 5 अपने RAID 0 सरणी, बशर्ते आपके पास पर्याप्त ड्राइव और नियंत्रक हो।

आप यहां प्रतिकृति के साथ भी खेल सकते हैं - क्या आप अपने डिस्क-हेवी सर्वर पर लिखते हैं जो एक या अधिक मेमोरी-हेवी सर्वरों की नकल करता है जहां आप जटिल प्रश्न चलाते हैं।

अफसोस की बात है, RDBMS बड़े-लोहे के दायरे में दिखाई देते हैं - वे क्षैतिज रूप से बढ़ने में आसान नहीं हैं।


0

यह एक मामला है "यह निर्भर करता है कि आप क्या कर रहे हैं।" शायद "सही" सलाह एसक्यूएल से पूरी तरह से बचने और मेमेचे / रेडिस / आदि का उपयोग करने के लिए है!

मैं आपसे सहमत हूं कि अतिरिक्त रैम बहुत मदद करेगा, खासकर यदि आप रैम में पूरे काम करने वाले सेट को पढ़ने में सक्षम हैं। हां, इसके लिए अभी भी डेटा लिखना होगा, लेकिन अगर आपने ज्यादातर पढ़ा है तो राइट्स में डिस्क I / O के लिए कोई विवाद नहीं होगा।

हालाँकि डिस्क प्रदर्शन अक्सर SQL सर्वर पर एक अड़चन है और बाद में अपग्रेड करने के लिए रैम जैसी अन्य चीजों की तुलना में कठिन है (यदि आपके पास एक सर्वर है जो DIMMs के साथ पूरी तरह से आबादी नहीं है)।

RAID5 के धीमा होने के बारे में कई टिप्पणियां थीं, लेकिन मैं कहूंगा कि यह हमेशा ऐसा नहीं होता है, इसलिए व्यापक बयान देने से पहले सावधान रहें। बहुत तेजी से RAID कार्ड के साथ उच्च अंत सर्वर और BBWC के बहुत सारे कभी-कभी RAID10 में वे करते हुए RAID5 (या RAID50> 4 डिस्क) में बहुत तेजी से चलते हैं ...

इन वर्षों में मैंने व्यक्तिगत रूप से धीमी RAID5 सरणियों का अनुभव किया है, लेकिन ~ 2009 में 4 146G SAS डिस्क के साथ DL360 G5 बेंचमार्किंग के बाद, हमें अपने परीक्षणों की दोहरी जांच करनी थी। वास्तव में, सरणी लगभग हर परीक्षण में RAID10 की तुलना में तेजी से चली गई। BBWC और तेज समानता गणनाओं की अनुमति है कि सर्वर RAID10 की तुलना में RAID5 सरणी के रूप में 4 डिस्क का अधिक प्रभावी ढंग से उपयोग कर सकता है। कुछ परीक्षणों ने RAID5 के साथ 50% बेहतर थ्रूपुट दिखाया, और लगभग कोई भी धीमा नहीं था। परीक्षण जो धीमे थे, वे केवल 5-10% थे।

मैं उन लोगों को सावधान करूंगा जो कंबल बयान करते हैं कि RAID5 धीमा है, हर कोई इसे ऑनलाइन कहता है, लेकिन यह बस हर मामले में सच नहीं है।


-1

आपके पास चयन करने के लिए कैंडी का मिक्स बैग है और वास्तव में इस बात पर निर्भर करता है कि आपको क्या स्वाद चाहिए।

  1. DB के पास कैश क्वेश्चन के लिए कॉन्फिगर होगा और जहां यह कैशे मौजूद है, मेमोरी या हार्ड ड्राइव।
  2. RAID 5 हमेशा सबसे तेज़ नहीं होता है, लेकिन RAID 0 (JBOD) एक धारी है और तेज़ है, क्योंकि RAID 5 भी एक धारी है विचार बहुत समान है।
  3. RAID 1 आपकी गति में सुधार नहीं करेगा, यह सिर्फ एक दर्पण है।
  4. एसक्यूएल प्रदर्शन इंडेक्सिंग पर आधारित है, और जाँच करने वाली पहली चीज़ है। संबंधपरक डेटाबेस में बहुत महत्वपूर्ण है।
  5. अनुक्रमणिका पर सब कुछ अनुक्रमणित न करें, इसलिए गति को भी कम कर सकते हैं क्योंकि आपकी अनुक्रमणिका ओवर लोड हो जाती है।
  6. कभी-कभी SQL जॉइन के साथ डेटाबेस धीमा हो जाता है। न्यूनतम अनुक्रमित परिणामों के एक सेट को लूप करने के लिए प्रोग्रामिंग का उपयोग करने से गति में सुधार होता है।
  7. यदि आप डॉलर का भुगतान नहीं करते हैं तो वर्चुअल सर्वर गति पर एक बुरा सपना है।

नकद जमा करने से पहले ज्ञान (फ्री) में निवेश करें। 1. अपने डेटाबेस के लिए कॉन्फिग सीखें और ऑप्टिमाइज़ करने के लिए अपने करंट कॉन्फिगर को देखें। 2. प्रोग्रामिंग और एसक्यूएल बयानों को देखें, सरल स्क्रिप्ट के साथ यूनिट टेस्ट जो इसमें शामिल संचालन की नकल करते हैं, यह भी नहीं हो सकता है कि आप क्या सोचते हैं कि यह मुद्दा है। यदि सरल स्क्रिप्ट एसक्यूएल जॉइन का उपयोग करने में समय लेती हैं, तो इसे विभाजित करें और ऐसा ही करने के लिए प्रोग्राम किए गए लूप के साथ एक ही काम करें। यह वह मेमोरी है जो मदद कर सकता है 3. होस्टिंग प्लान और सर्वर को देखें। एक linux कंसोल में ps aux का उपयोग करें और देखें कि क्या आपकी मेमोरी और प्रोसेसर को चूसने वाली कोई चीज है।

निरपेक्ष हार्ड ड्राइव गति में सुधार करता है लेकिन वर्चुअल सर्वर स्पेस में आपके ऊपर नहीं है। जब तक आप इसके लिए सेवाओं को कॉन्फ़िगर नहीं करते, मेमोरी गति में सुधार नहीं करती है। धारीदार RAID (0,5), RPM और सिंक्रोनस पढ़ें / लिखें एक तेज बस के साथ मदद करता है। अच्छा l1, l2, l3 कैश वाला कोर प्रोसेसर अड़चन को संसाधित करने में मदद करेगा। क्या मैं इसे एक्सोन के लिए सुन सकता हूँ!


2
RAID1 बिल्कुल पढ़ने की स्थिति में गति में सुधार करेगा। अधिकांश नियंत्रक एक ही समय में (समान) डेटा सेट से पढ़ने के लिए कई स्पिंडल का उपयोग करने के लिए पर्याप्त स्मार्ट हैं। RAID0 एक बुरा विचार है क्योंकि आप एक समय में एक धुरी तक सीमित हैं।
ब्रायन बोएचर

-4

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

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

वाह, क्या आपने अपनी पाठ्यपुस्तकों की (गलतफहमी से) नकल की है?
एडेप्टर

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