बड़े डेटासेट को संभालने के लिए SQL Server 2008 R2 के लिए शेडिंग सेट करने के लिए पैटर्न?


14

मैं SQL Server 2008 R2 में एक बड़े डेटासेट (> 1 बिलियन पंक्तियों) को संभालना चाहता हूं। मैंने सुना है कि यदि आप "शार्डिंग" या "हॉरिजॉन्टल पार्टिशनिंग" सेट करते हैं, तो यह बड़े डेटासेट को संभालने में तेज बनाता है क्योंकि यह कई फाइलों में टेबल को तोड़ता है।

क्या आपने पहले शार्पिंग या क्षैतिज विभाजन का उपयोग किया है? यदि हां, तो क्या आप किसी भी पैटर्न का सुझाव दे सकते हैं, जो आपके अनुभव में, एक विशाल तालिका की तुलना में बेहतर परिणाम प्राप्त करता है?

जवाबों:


23

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

साझाकरण क्षैतिज विभाजन से कुछ अलग है, और इसका अर्थ है 'साझा कुछ नहीं' आर्किटेक्चर, जो कि SQL सर्वर के अधिकांश संस्करणों द्वारा समर्थित नहीं है 1

SQL सर्वर क्षैतिज विभाजन का समर्थन कर सकता है, और एक साझा डिस्क आर्किटेक्चर ~ 1 बिलियन पंक्तियों के लिए पर्याप्त होगा।

SQL सर्वर में, आप एक पार्टीशन फ़ंक्शन बनाते हैं जो एक टेबल पर एक कॉलम में मान या श्रेणी के मानों के आधार पर एक विभाजन का चयन करता है

create partition function F_AccPrdPart (int)
    as range left for values (
    180001                         -- Dummy value
   ,199012 ,199112 ,199212 ,199312, 199412 ,199512
   ,199612 ,199712 ,199812 ,199912 ,200012 ,200112
   ,200212 ,200312 ,200412 ,200512 ,200612 ,200712
   ,200812
   ,200901, 200902, 200903, 200904, 200905, 200906
   ,200907, 200908, 200909, 200910, 200911, 200912
   ,201001, 201002, 201003, 201004, 201005, 201006
   ,201007, 201008, 201009, 201010, 201011, 201012
   ,201101, 201102, 201103, 201104, 201105, 201106
   ,201107, 201108, 201109, 201110, 201111, 201112
   ,202012
   ,939999                         -- Dummy value
)
go

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

विभाजन फ़ंक्शन के मान के आधार पर फ़ाइल विभाजन के लिए तालिका विभाजन आवंटित करने के लिए एक या अधिक विभाजन योजनाएँ बनाई जा सकती हैं

create partition S_AccPrdPart as partition F_AccPrdPart
    TO ([PRIMARY]
      ,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6] 
      ,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6]
      ,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6]
      ,[PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2]
      ,[PRIMARY]
      ,[PRIMARY])
go

यह योजना एक लेखा अवधि पर विभाजन के लिए डिज़ाइन की गई है। इसके लिए तिथियों का भी अक्सर उपयोग किया जाता है, हालांकि किसी भी कुंजी का उपयोग किया जा सकता है।

आप विभाजन योजना पर एक तालिका बना सकते हैं जैसे कि यह एक फ़ाइल समूह था, उदाहरण के लिए

Create table FooTrans (
       FooTransID        int identity (1,1) not null
      ,AccPeriod         int not null
      ,[...]
) on S_AccPrdPart (AccPeriod)
go

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

नोट: विभाजन योजना को डिजाइन करने के लिए अंगूठे का एक नियम यह है कि प्रत्येक विभाजन की पंक्तियों की चौड़ाई के आधार पर 10 से 50 मिलियन के बीच में एक पंक्ति की गिनती होनी चाहिए। जिस डिस्क वॉल्यूम पर विभाजन बैठता है, वह इतनी तेजी से होनी चाहिए कि कुछ सेकंड में कम से कम एक विभाजन का स्कैन कर सके।

विभाजन, साझाकरण और साझा कुछ भी नहीं सिस्टम

इस विषय पर चर्चा के कुछ खंडन करने के लिए थोड़ी शब्दावली यहां पर है।

  • एक 'साझा कुछ नहीं' प्रणाली एक समानांतर प्रणाली है जहां नोड्स में SAN भंडारण साझा नहीं होता है, लेकिन नोड के लिए भंडारण स्थानीय का उपयोग करें। इस तरह की वास्तुकला का उत्कृष्ट उदाहरण तेरदता है। साझा किए गए कुछ भी सिस्टम बहुत बड़े डेटा सेट के लिए अच्छी तरह से स्केल नहीं करते हैं क्योंकि उनके पास कोई केंद्रीय I / O अड़चन नहीं है। I / O सिस्टम में नोड्स की संख्या के साथ थ्रूपुट तराजू।

  • 'साझा डिस्क' प्रणाली वह है जिसमें एक या अधिक डेटाबेस सर्वर एक एकल डिस्क संग्रहण सबसिस्टम साझा करते हैं। डेटाबेस या तो स्थानीय भंडारण के साथ एक सर्वर हो सकता है या सैन से जुड़ा हो सकता है, या साझा सैन से जुड़ा सर्वर का एक समूह हो सकता है। इस प्रकार के सिस्टम स्टोरेज सबसिस्टम से उपलब्ध थ्रूपुट द्वारा विवश हैं।

  • 'साझाकरण' एक शब्द है जिसका उपयोग साझा भौतिक वास्तुकला में कई भौतिक सर्वरों के बीच डेटाबेस को विभाजित करने के लिए किया जाता है। विभिन्न प्लेटफार्मों में शार्क डेटाबेस के लिए अधिक या कम समर्थन होगा। Teradata हलकों में, इस शब्द का उपयोग नहीं किया गया है क्योंकि Teradata ग्राहकों के लिए एक पारदर्शी एकल सिस्टम छवि प्रस्तुत करता है, भले ही भौतिक वास्तुकला एक साझा कुछ भी नहीं है।

    एसक्यूएल सर्वर के पुराने संस्करणों में वितरित विभाजन विचारों के माध्यम से साझा करने के लिए सीमित समर्थन है। Microsoft अब SQL सर्वर 2008 R2 का एक संस्करण बनाता है जो एक एकल सिस्टम छवि के साथ साझा कुछ भी नहीं आर्किटेक्चर का समर्थन करता है, लेकिन यह संस्करण केवल ओईएम के लिए उपलब्ध है और इसे केवल हार्डवेयर बंडल में खरीदा जा सकता है।

1 बिलियन पंक्तियों के लिए

1 बिलियन पंक्तियों के लिए (जब तक कि व्यक्तिगत पंक्तियाँ अत्यंत व्यापक न हों) एक साझा कुछ भी या नुकीला वास्तुकला आराम से ओवरकिल के दायरे में नहीं है। इस प्रकार की मात्रा को उचित युक्ति के एकल सर्वर पर संभाला जा सकता है यदि इसमें पर्याप्त रूप से तेज डिस्क सबसिस्टम हो।

प्रदर्शन के लिए कीमत के मामले में स्थानीय प्रत्यक्ष अटैच डिस्क सबसे अधिक लागत प्रभावी है। एक एकल SAS RAID नियंत्रक कई सरणियाँ ले सकता है, और एक सर्वर में कई नियंत्रक स्थापित किए जा सकते हैं। कॉन्फ़िगरेशन के आधार पर, एक आधुनिक 24-25 स्लॉट एसएएस सरणी हजारों आईओपीएस या 1 जीबी + / सेक के माध्यम से स्ट्रीमिंग प्रदर्शन में डाल सकता है; कई PCI-e busses और कई नियंत्रकों वाला सर्वर सैद्धांतिक रूप से अधिक संभाल सकता है।

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

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

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

1 Microsoft SQL सर्वर के समानांतर संस्करण बनाते हैं, लेकिन यह केवल हार्डवेयर के साथ बंडल किए गए OEM चैनलों के माध्यम से उपलब्ध है। शेल्फ से उपलब्ध संस्करण इस क्षमता का समर्थन नहीं करते हैं।


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