SSD पर SQL सर्वर डेटाबेस - हर तालिका के लिए एक अलग फ़ाइल का कोई लाभ?


19

मैं एक डेटाबेस बना रहा हूं जिसमें लगभग 30 टेबल होंगे, जिसमें हर टेबल पर लाखों पंक्तियाँ और प्रत्येक टेबल में एक ही महत्वपूर्ण कॉलम और एक प्राथमिक / विदेशी कुंजी कॉलम होगा, जिसमें भारी होने की सूरत में क्वेरी दक्षता को अधिकतम किया जाएगा। अद्यतन और सम्मिलन और संकुल अनुक्रमित का भारी उपयोग करते हैं। टेबलों में से दो में परिवर्तनशील-लंबाई वाले पाठात्मक डेटा होंगे, जिनमें से एक में सैकड़ों लाखों पंक्तियाँ होंगी लेकिन बाकी में केवल संख्यात्मक डेटा होगा।

जैसा कि मैं वास्तव में मेरे द्वारा उपलब्ध हार्डवेयर के प्रदर्शन के हर अंतिम ड्रॉप को निचोड़ना चाहता हूं (लगभग 64 जीबी रैम, एक बहुत तेज एसएसडी और 16 कोर), मैं प्रत्येक टेबल को अपनी फाइल रखने की अनुमति देने के बारे में सोच रहा था ताकि कोई फर्क न पड़े मैं 2, 3, 4, 5 या अधिक तालिकाओं में शामिल हो रहा हूं, प्रत्येक तालिका को हमेशा एक अलग थ्रेड का उपयोग करके पढ़ा जाएगा और प्रत्येक फ़ाइल की संरचना को तालिका की सामग्री के साथ निकटता से जोड़ा जाएगा, जो उम्मीद है कि विखंडन को कम करेगा और इसे तेज करेगा SQL सर्वर के लिए किसी भी दी गई तालिका की सामग्री को जोड़ने के लिए।

एक चेतावनी, मैं SQL Server 2008 R2 वेब संस्करण पर अटका हुआ हूं । जिसका अर्थ है कि मैं स्वचालित क्षैतिज विभाजन का उपयोग नहीं कर सकता, जो एक प्रदर्शन वृद्धि के रूप में नियम करता है।

क्या वास्तव में प्रदर्शन को अधिकतम करने के लिए प्रति तालिका एक फ़ाइल का उपयोग किया जाएगा, या क्या मैं अंतर्निहित SQL सर्वर इंजन विशेषताओं को अनदेखा कर रहा हूं जो इतना अनावश्यक कर देगा?

दूसरा, यदि प्रति तालिका एक फ़ाइल का उपयोग करना लाभप्रद है, create tableतो मुझे केवल एक फ़ाइल समूह को तालिका आवंटित करने का विकल्प क्यों देना है और किसी विशिष्ट तार्किक फ़ाइल को नहीं? इससे मुझे अपने परिदृश्य में प्रत्येक फ़ाइल के लिए एक अलग फ़ाइल समूह बनाने की आवश्यकता होगी, जो मुझे सुझाव देता है कि शायद SQL सर्वर उन लाभों की कल्पना नहीं कर रहा है जो मैं मान रहा हूं कि मैं जो प्रस्ताव कर रहा हूं उससे आ जाएगा।

जवाबों:


18

मैं प्रत्येक तालिका को अपनी फ़ाइल की अनुमति देने के बारे में सोच रहा था ताकि कोई फर्क नहीं पड़े कि मैं 2, 3, 4, 5 या अधिक तालिकाओं में शामिल हो रहा हूं, प्रत्येक तालिका को हमेशा एक अलग थ्रेड और प्रत्येक फ़ाइल की संरचना का उपयोग करके पढ़ा जाएगा तालिका की सामग्रियों के साथ निकटता से गठबंधन करें, जो विखंडन को न्यूनतम रूप से कम करेगा और SQL सर्वर के लिए किसी भी दी गई तालिका की सामग्री में जोड़ने के लिए इसे तेज कर देगा।

आप क्या फालतू की बातें कर रहे हैं? निश्चित नहीं है कि आपको अपनी जानकारी कहाँ से मिली, लेकिन आपको उस स्रोत को छोड़ना चाहिए। यहां आप जो भी मानते हैं, उससे कुछ भी वास्तव में सही नहीं है।

यदि आप SQL सर्वर के लिए SSD प्रदर्शन की एक अच्छी चर्चा पढ़ना चाहते हैं, तो वहाँ कई ब्लॉग श्रृंखलाएँ हैं। आमतौर पर, पॉल रान्डल एक शीर्ष पढ़ा जाता है:

ब्रेंट में भी इस विषय पर एक अच्छी प्रस्तुति है: एससडी पर एसक्यूएल: हॉट एंड क्रेजी लव और वहाँ बाहर अधिक हैं।

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


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

17

मेरा पहला सुझाव दोनों कॉन्फ़िगरेशन के खिलाफ लोड परीक्षण किए बिना प्रदर्शन के बारे में कोई धारणा नहीं बनाना होगा।

अतीत में इस तरह के विन्यास (कि कागज पर समझ बनाने) को देखने से मेरा अनुमान यह होगा कि एक अलग फाइल पर प्रत्येक तालिका के प्रदर्शन के लिए एक औसत दर्जे का सकारात्मक प्रभाव नहीं होगा ... और अतिरिक्त जटिलता किसी भी प्रदर्शन लाभ को ऑफसेट करेगी। भले ही वे औसत दर्जे के थे।

अंत में, जब Sql सर्वर से प्रदर्शन की हर बूंद को निचोड़ने की बात आती है, तो मैं आपको निम्न चार्ट (आपके Microsoft प्रदान) का उल्लेख करता हूं:

यहाँ छवि विवरण दर्ज करें

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


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

@NathanRidley ओके, समझ में आया ... मुझे लगता है कि असली जवाब जब तक किसी के पास "कभी ऐसा न करने" वाला संसाधन न हो, कि कार्रवाई का सबसे अच्छा तरीका यह होगा कि आप अपने विशिष्ट कार्यभार के खिलाफ दो विन्यासों की तुलना करें, और देखें कि क्या कोई मापने योग्य अंतर है।
माइकल फ्रेडरिकसन

4

जैसा कि अन्य ने उल्लेख किया है, प्रति तालिका एक फ़ाइल से कोई प्रत्यक्ष लाभ नहीं है; यहाँ कैसे इस मिथक उत्पन्न पर स्टीव जोन्स से एक महान सार है: http://www.sqlservercentral.com/blogs/steve_jones/2009/10/13/sql-server-legend-data-files-and-threads/

आप यह भी देख सकते हैं कि एक विभाजन दृश्य की जांच करना जो मुझे विश्वास है कि 2008 वेब संस्करण द्वारा समर्थित है। एक विभाजन दृश्य के खिलाफ कोडिंग करने के लिए कुछ तरकीबें हैं, लेकिन आप विभाजन तालिका की कार्यक्षमता की बहुत आसानी से नकल कर सकते हैं।


2

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

SQL Server 2008 R2 संपीड़न का समर्थन करता है? यदि हाँ, तो उसे चालू करें।

यदि मैं गलत हूं तो मुझे सही करों।


क्या आप इस बात पर विस्तार से बता सकते हैं कि कोई प्रदर्शन लाभ क्यों नहीं होगा? बहुत कम से कम, यह समझाएं कि ऐसा क्यों होता है जब अलग-अलग फाइलें SQL सर्वर को पढ़ने के लिए कई थ्रेड्स का उपयोग करने की अनुमति देती हैं।

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

आप समानांतर थ्रेड्स (तालिकाओं / फ़ाइलों) के बारे में सही हैं, लेकिन मुझे लगता है कि जब तक आपके पास केवल एक भौतिक डिस्क नहीं है, प्रदर्शन लाभ छोटा होगा।

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