SQL सर्वर 2005/2008 - कई फाइलें / फ़ाइल समूह - कितने? क्यों?


11

मैं दिल से एक डेवलपर हूं - लेकिन हर अब और फिर, एक ग्राहक के पास इन मुद्दों से निपटने के लिए एक सभ्य डीबीए नहीं है, इसलिए मुझे निर्णय लेने के लिए बुलाया जाता है ...।

जब आप उचित आकार के SQL सर्वर डेटाबेस (नॉर्थविंड या वॉवर्क्स से कुछ भी बड़ा हो) से निपटने की बात करते हैं तो आपकी रणनीति / सर्वोत्तम अभ्यास क्या हैं? लगभग 2-4GB डेटा प्लस इंडेक्स आदि - क्या आप कई फ़ाइलों / फ़ाइल समूह का उपयोग करते हैं?

यदि हां: तो कितने? और क्यों?

"सब कुछ के लिए एक फ़ाइल समूह" से दूर जाने के लिए आपके मानदंड क्या हैं:

* database size?
* database complexity?
* availability / reliability requirements?
* what else?

यदि आप कई फ़ाइल समूहों का उपयोग करते हैं, तो आप कितने का उपयोग करते हैं? डेटा के लिए एक, इंडेक्स के लिए एक, लॉग के लिए एक? डेटा के लिए कई (कितने)? आपकी पसंद के कारण क्या हैं - आप फ़ाइलग्रुप की सही संख्या का उपयोग क्यों करते हैं :-)

किसी भी संकेत, संकेत, विचार के लिए धन्यवाद!

चीयर्स, मार्क

जवाबों:


16

अंगूठे का मूल नियम विवाद से बचने के लिए अलग-अलग संस्करणों पर फ़ाइलों को अलग करना है, हालांकि आपको प्राप्त होने वाले प्रदर्शन का लाभ I / O सबसिस्टम और वर्कलोड द्वारा बेतहाशा भिन्न होता है। उदाहरण के लिए, एक एकल भौतिक स्पिंडल पर कई फाइलें जहां तक ​​जाती हैं, वहां तक ​​परफॉरमेंस के रूप में चूसना होता है, लेकिन एक ही व्यवस्था के साथ SAN LUN कई सौ ड्राइव के साथ RAID 10 सरणियों से ठीक हो सकता है। डिस्क कतार लंबाई काउंटर आपके मित्र को यह बताने का सबसे सरल तरीका है कि क्या आपको I / O अड़चन है।

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

प्रदर्शन के साथ-साथ, आपको प्रबंधनीयता और पुनर्प्राप्ति पर विचार करना चाहिए। 100GB डेटाबेस के लिए एकल, अखंड डेटा फ़ाइल होने का अर्थ है कि आपकी पुनर्स्थापना की इकाई वह फ़ाइल है। यह 4 25GB फ़ाइल समूह में विभाजित होने का मतलब है कि आप आंशिक डेटाबेस उपलब्धता का उपयोग कर सकते हैं और टुकड़े टुकड़े को केवल क्षतिग्रस्त होने की स्थिति में एकल फ़ाइल समूह को पुनर्स्थापित करना है। कई फाइलग्रुप में टेबल और इंडेक्स को विभाजित करके आप रखरखाव के संचालन (जैसे इंडेक्स फ़्रेग्मेंटेशन)) से डेटाबेस के किन हिस्सों को प्रभावित कर सकते हैं।

Tempdb एक संपूर्ण विशेष मामला है, और मैं आपको अपने एक ब्लॉग पोस्ट पर इंगित करूँगा, जो सभी को बताता है कि क्यों और कैसे tempdb को विभाजित करना है - वहाँ बहुत सारी भ्रांतियाँ हैं।

आपको यहां 'व्यापक सामान्यीकरण' की अनुशंसा दिए बिना, मैं आपको पढ़ने के लिए व्हाइटपॉपर और ब्लॉग पोस्ट के एक समूह में इंगित करूंगा:

आशा है कि यह आपकी मदद करता है!


+1 बहुत बहुत धन्यवाद, पॉल - महान पोस्ट, महान लिंक्स - उत्कृष्ट
marc_s

शानदार उत्तर पॉल -> मैं SqlServer और हार्ड डिस्क डिज़ाइन के बारे में पहले से पूछे गए कुछ सवालों को खोजने की कोशिश कर रहा था (जैसे। Tem1DB on Bus1_Disk1, My_DB on Bus2_Disk1, आदि ..) .. पढ़ने का समय ....
Pure.Krome

4

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

कुछ परिदृश्य हैं जो कुछ विशेष स्थानों के तहत दिलचस्प हो सकते हैं:

  • 2 फ़ाइल समूह: डेटा और इंडेक्स
  • 3 फाइलग्रुप: केवल पढ़ने के लिए टेबल, रीड-राइट टेबल, इंडेक्स
  • कई फ़ाइल समूह: केवल पढ़ने, लिखने, सूचकांक, कुंजी तालिका 1, कुंजी तालिका 2, ...

आपको यह तय करने के लिए अपने वातावरण का विश्लेषण करना होगा कि क्या फ़ाइल समूह आपके SQL सर्वर के विकास, उपयोग और प्रदर्शन की जरूरतों में मदद करेगा।

कुछ प्रमुख संकेतक कई फाइलग्रुप में जाने के लिए ( इस लेख से ):

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

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

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


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