SQL सर्वर विभाजन - विभाजन कुंजी के लिए क्या उपयोग करना है?


10

मैंने एसक्यूएल सर्वर विभाजन के साथ कभी काम नहीं किया है, लेकिन मुझे वर्तमान में एक डेटाबेस डिजाइन करने का सामना करना पड़ा है जिसके लिए वॉल्यूम संभवतः इसे वारंट करते हैं। सिस्टम कूपन के लिए है। कूपन को समय-समय पर जारी किया जाता है, आमतौर पर हर छह सप्ताह में हालांकि एक विशेष कार्यक्रम के लिए भी तदर्थ जारी करना होगा - जैसे। 15 मिलियन ग्राहक हैं और जारी करने की घटना के लिए, प्रत्येक ग्राहक को 6 अलग-अलग कूपन प्रकार प्राप्त होंगे, जो कुल 90 मिलियन कूपन इंस्टेंसेस देंगे। हमें कूपन इंस्टेंशन रिडेम्पशन डेटा को ट्रैक करने और इसे 6 महीने तक बनाए रखने की आवश्यकता है, हालांकि आमतौर पर एक कूपन केवल छह सप्ताह के लिए वैध होता है। अमान्य कूपन के लिए कोई भी मोचन अनुरोध डेटाबेस तक नहीं पहुंचेगा क्योंकि यह पीओएस द्वारा मान्य होगा।

छह महीने की अवधि में हमें कूपन इंस्टेंस टेबल में 360 मिलियन पंक्तियों और 72 मिलियन तक (अधिकतम 20% मोचन दर मानकर) मोचन तालिका में संग्रहीत करने की आवश्यकता होगी। मुझे लग रहा है कि ये संख्याएँ एक विभाजन के लिए बहुत बड़ी हैं?

मेरा सवाल है - विभाजन कुंजी के रूप में क्या उपयोग करना है? एक स्पष्ट उम्मीदवार लगभग 6 विभाजन देते हुए, जारी कार्यक्रम द्वारा होगा। लेकिन फिर मुझे लगता है कि शायद यह भी एक विभाजन का आकार देगा जो कि इष्टतम प्रदर्शन के लिए अनुमति देने के लिए बहुत बड़ा है? क्या ग्राहक आईडी जारी करने वाली घटना + अंतिम अंक जैसे दो कुंजी द्वारा विभाजन करना संभव होगा? तो तर्क होगा:

If issuance event = 1 and last digit of customer id < 5 then
    Store in partition 1
Else if issuance event = 1 and last digit of customer id >4 then
    Store in partition 2
Else if issuance event =2 and last digit of customer id <5 then
    Store in partition 3
Else if issuance event =2 and last digit of customer id >4 then
    Store in partition 4
Etc...

इसके अलावा, मुझे उस डेटाबेस सर्वर की कल्पना पर यकीन नहीं है जिसकी हमें आवश्यकता होगी। क्या 16gb और 8CPU पर्याप्त होंगे? Db को कूपन इंस्टेंस टेबल से परिणाम देने में सक्षम होने की जरूरत है, जो आधे से एक सेकंड में एक संख्यात्मक बारकोड मान पर कुंजीबद्ध होता है। वैध (चयनित) और रिडीम (डालने) के लिए अपेक्षित लेनदेन अनुरोध लगभग 3,500 प्रति मिनट की दर से शिखर पर पहुंचने की उम्मीद है।

SQL सर्वर 2008r2 64bit db सर्वर को उच्च प्रदर्शन और बड़ी क्षमता SAN तक पहुँच के साथ बहुत शक्तिशाली होस्ट से VM के रूप में प्रावधान किया जाएगा।

मैं उन लोगों से किसी भी सलाह के लिए बहुत आभारी रहूंगा जिन्होंने समान संस्करणों का प्रबंधन करने के लिए एक SQL सर्वर समाधान तैनात किया है।

सादर

रोब।


2
आपकी तालिकाएं अभी भी छोटी हैं - विभाजन के लिए कोई आवश्यकता नहीं है, मेरे पास विभाजन, कार्यों के बिना कुछ अरब पंक्तियों के साथ एक तालिका है। विभाजन हालांकि DROP के लिए अच्छा है।
टॉमटॉम

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

1
नहीं, यह सही है। जरूरत है! = लाभ। आवश्यकता तब होती है जब आप विभाजन के बिना प्रश्न करने वाली समस्याओं में भाग लेते हैं।
टॉमटॉम

1
अरे @TomTom मुझे लगता है कि आपको एक छोटे ब्रेक दोस्त की ज़रूरत है, यह थोड़ा मजबूत है, भले ही वास्तव में आक्रामक न हो। मार्क StoreySmith, एक कंबल "कोई ज़रूरत नहीं" के साथ मैं सहमत सादा गलत है, फिर भी आपके दावा है कि यह है शायद जरूरत नहीं सही है। मैं कल्पना करता हूं कि यह अनुक्रमण का विषय है। मुझे यह भी पता है कि मार्क को पता है कि आपको बनाम लाभ से क्या मतलब है। हम सब को थोड़ा सुस्त काटें और कैफीन पर छोड़ दें, के? (और मुझ पर भरोसा है, मैं बहुत कम धैर्य कुछ दिन, आज की तरह विशेष रूप से दिन जहाँ मैं मेरी पीठ के लिए दर्द meds पर हूँ के लिए जाना जाता रहा हूँ)
jcolebrand

जवाबों:


14

सर्वर युक्ति प्रश्नों को या तो सर्वरफॉल्ट या DBA.SE को निर्देशित किया जाना चाहिए।

विभाजन प्रश्न के लिए, मुझे नहीं लगता कि इसके लिए आपको विभाजन की आवश्यकता है।

360 मीटर पंक्तियाँ बहुत हैं, लेकिन यह बहुत कम नहीं है।

किसी भी परिस्थिति में किसी क्षेत्र के अंतिम अंक के आधार पर विभाजन का प्रयास करें । मुझे यकीन नहीं है कि यह भी काम करेगा, लेकिन यह SARGable नहीं है जो टेनबल नहीं होगा।

यदि आपको केवल संख्यात्मक कुंजी के आधार पर एकल पंक्ति की तलाश करने की आवश्यकता है, तो विभाजन संभवतः मदद नहीं करेगा।

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



मैं भी कंसर्न करता हूं। कभी-कभी आपको सिर्फ बेहतर अनुक्रमित की आवश्यकता होती है।
jcolebrand

मैं @JNK से असहमत हूं। एक संख्यात्मक कुंजी के आधार पर एक एकल पंक्ति की तलाश है जो विभाजन उन्मूलन से लाभ IO को कम कर रही है। यदि पहुंच के पैटर्न ऐसे हैं कि बार-बार एक्सेस किए गए विभाजन बफर पूल में रहते हैं, तो आमतौर पर एक्सेस किए गए विभाजन पर, आपको आगे के प्रदर्शन लाभ होते हैं। और हमने मेरी पसंदीदा विशेषता को भी नहीं छुआ है जो विभाजन आपको देता है, आंशिक उपलब्धता।
मार्क स्टोरी-स्मिथ

रिकॉर्ड के लिए, आपके अन्य बिंदुओं पर मैं पूरे दिल से सहमत हूं :)
मार्क स्टोरी-स्मिथ

@ MarkStorey- स्मिथ - यह उसकी कुंजी पर निर्भर करने वाला है। जैसा कि वर्तमान में ओपी में परिभाषित किया गया है कि विभाजन का कोई मूल्य नहीं होगा। यह भी लगता है कि वह एक तारीख क्षेत्र या "सामान्य" विभाजन योजना के साथ दो-भाग कुंजी का उपयोग करने में सक्षम नहीं होगा।
JNK

5

यदि आप एक स्थायी गणना वाले कॉलम का उपयोग करते हैं, तो आप कई कुंजियों पर विभाजन कर सकते हैं; जैसा कि दूसरों ने कहा है, हालांकि, विभाजन हर स्थिति के लिए काम नहीं करता है। मुझे यकीन नहीं है कि मैं आपको विशिष्ट सलाह देने के लिए आपके परिदृश्य को पर्याप्त समझता हूं, लेकिन यहां कुछ सामान्य दिशानिर्देश हैं:

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

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


4

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

विभाजन का उपयोग डेटा संग्रह के लिए किया जा सकता है। स्लाइडिंग विंडो परिदृश्य देखें। इस श्वेतपत्र और यह एक देखें ।

सूचकांक विखंडन का प्रबंधन करने के लिए विभाजन का भी उपयोग किया जा सकता है। आप विशेष विभाजनों का पुनर्निर्माण / पुनर्गठन कर सकते हैं।

आपको विभाजित तालिकाओं के विपरीत विभाजित विचारों पर भी विचार करना चाहिए। विभाजन दृश्य के लिए SQL सर्वर एंटरप्राइज़ लाइसेंस की आवश्यकता नहीं है। विभाजन किए गए दृश्य आपको एक विशेष "विभाजन" पर ऑनलाइन इंडेक्स रीबोर करने में सक्षम बनाते हैं।

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

विभाजन पर किम्बर्ली ट्रिप से इस बेहतरीन वीडियो को देखें


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

3
तो मूल रूप से आपको हर हफ्ते लगभग 15 मिलियन पंक्तियों को हटाना / निकालना होगा। टेबल कितनी चौड़ी है? मेरा सुझाव है कि आप तारीख कॉलम द्वारा तालिका का विभाजन करें। इस तरह साप्ताहिक विलोप एक साधारण मेटा ऑपरेशन होगा। आपको बस मुख्य विभाजन तालिका के सबसे पुराने विभाजन को एक मचान तालिका में बदलना है। फिर स्टेजिंग टेबल को गिरा दें। इसे स्लाइडिंग विंडोज परिदृश्य कहा जाता है। पहले सफेद कागज को देखो मैंने ओह पोस्ट किया यह कैसे करना है।
धर्मेंद्र कुमार 'डीके'

-2

जब तक आप पुराने डेटा को संग्रहीत करने के कारण विभाजन नहीं करते हैं, आप इसे गलत कारण से कर रहे हैं और ऐसा नहीं करना चाहिए।


2
संग्रह के अलावा विभाजन का उपयोग करने के कई कारण हैं; यदि सही तरीके से उपयोग किया जाए तो कई अलग-अलग प्रकार के प्रश्नों के लिए पार्टिशन अपवर्जन बहुत फायदा करता है।
स्टुअर्ट आइन्सवर्थ

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