SQL सर्वर इंडेक्स फ़्रेग्मेंटेशन डेटाबेस के प्रदर्शन में गिरावट का एक सामान्य स्रोत है। फ्रैगमेंटेशन तब होता है जब किसी डेटा पेज (आंतरिक विखंडन) पर बहुत अधिक खाली स्थान होता है या जब इंडेक्स में पृष्ठों का तार्किक क्रम डेटा फ़ाइल (बाहरी विखंडन) में पृष्ठों के भौतिक क्रम से मेल नहीं खाता है।
अनुक्रमणिका स्कैन करने वाली क्वेरी निष्पादित करते समय विखंडन-संबंधी प्रदर्शन समस्याएँ सबसे अधिक बार देखी जाती हैं। अनुक्रमणिका खोज करने वाली क्वेरी उच्च अनुक्रमणिका विखंडन से प्रभावित नहीं हो सकती हैं।
एसक्यूएल सर्वर इंडेक्स फ्रैगमेंटेशन के प्रकारों को समझना
आंतरिक अनुक्रमणिका विखंडन
आंतरिक विखंडन तब होता है जब डेटा पृष्ठों में बहुत अधिक खाली स्थान होता है। यह अतिरिक्त स्थान कुछ अलग तरीकों से पेश किया गया है:
- एसक्यूएल सर्वर 8केबी पेज पर डाटा स्टोर करता है। इसलिए जब आप किसी तालिका में 8KB से कम डेटा सम्मिलित करते हैं, तो आपके पास पृष्ठ पर रिक्त स्थान रह जाता है।
- इसके विपरीत, यदि आप पृष्ठ के स्थान से अधिक डेटा सम्मिलित करते हैं, तो अतिरिक्त डेटा दूसरे पृष्ठ पर भेज दिया जाता है। यह संभावना नहीं है कि अतिरिक्त डेटा बाद के पृष्ठों को पूरी तरह से भर देगा, इसलिए आपके पास एक पृष्ठ पर फिर से रिक्त स्थान रह जाएगा।
- डेटा पृष्ठ पर रिक्त स्थान तब भी होता है जब किसी तालिका से डेटा हटा दिया जाता है।
आंतरिक फ़्रेग्मेंटेशन मुख्य रूप से प्रदर्शन समस्याओं का कारण बनता है जब SQL सर्वर एक अनुक्रमणिका स्कैन करता है। प्रदर्शन धीमा हो जाता है जब SQL सर्वर को अपने द्वारा खोजे जा रहे डेटा को खोजने के लिए कई आंशिक रूप से भरे हुए पृष्ठों को स्कैन करना पड़ता है।
बाहरी अनुक्रमणिका विखंडन
बाहरी विखंडन डेटा पृष्ठों के क्रम से बाहर होने का परिणाम है। यह पूर्ण पत्ती वाले पृष्ठों में डेटा डालने या अपडेट करने के कारण होता है। जब डेटा को एक पूर्ण पृष्ठ में जोड़ा जाता है, तो SQL सर्वर अतिरिक्त डेटा को समायोजित करने के लिए एक पृष्ठ विभाजन बनाता है, और नया पृष्ठ मूल पृष्ठ से अलग हो जाता है।
रैंडम I/O को बढ़ाकर बाहरी फ़्रेग्मेंटेशन प्रदर्शन समस्याओं का कारण बनता है। जब पृष्ठ अनुक्रमिक नहीं होते हैं, तो SQL सर्वर को कई स्थानों से डेटा पढ़ना पड़ता है, जो क्रम में पढ़ने की तुलना में अधिक समय लेने वाला होता है।
एसक्यूएल सर्वर इंडेक्स फ्रैगमेंटेशन से कैसे बचें
सूचकांक विखंडन को पूरी तरह से रोकना संभव नहीं है, लेकिन इसकी घटना को कम करने और डेटाबेस प्रदर्शन पर विखंडन के प्रभाव को कम करने के तरीके हैं। SQL सर्वर इंडेक्स फ़्रेग्मेंटेशन से बचने के लिए क्या करें और क्या न करें, ये यहां दिए गए हैं:
करें: ऐसे क्लस्टर कुंजियाँ चुनें जो लगातार बढ़ते मान या लगातार घटते मान हों। यह पृष्ठ विभाजन को कम करेगा क्योंकि जब आप रिकॉर्ड सम्मिलित करते हैं, तो उन्हें तार्किक पृष्ठ श्रृंखला के आरंभ या अंत में रखा जाएगा।
नहीं करें: यादृच्छिक कुंजी मानों के साथ रिकॉर्ड डालें। स्थिर कुंजी मान चुनें ताकि एक बार रिकॉर्ड रखने के बाद, उसे कभी हिलना न पड़े और क्रम से बाहर न हो।
नहीं करें: उन्हें लंबा बनाने के लिए रिकॉर्ड अपडेट करें। किसी अद्यतन के दौरान किसी अनुक्रमणिका में रिकॉर्ड जोड़ने के लिए SQL सर्वर को कुछ डेटा को एक नए पृष्ठ पर धकेलने की आवश्यकता हो सकती है। इसके परिणामस्वरूप गैर-अनुक्रमिक पन्ने वाले पृष्ठ हो सकते हैं और अंततः, प्रदर्शन समस्याएं हो सकती हैं।
नहीं करें: इंडेक्स कुंजी कॉलम अपडेट करें। कुंजी कॉलम अपडेट के लिए नई कुंजी मान का उपयोग करके एक पूर्ण पंक्ति डालने के बाद एक पूर्ण पंक्ति हटाने की आवश्यकता होती है। यदि किसी पृष्ठ पर पर्याप्त स्थान के बिना नई पंक्ति डाली जाती है, तो आपको एक पृष्ठ विभाजन प्राप्त होगा।
करें: उन विशेषताओं से अवगत रहें जो पृष्ठ विभाजन का कारण बन सकती हैं। अनुक्रमणिका वाली किसी भी विशेषता को संशोधित करने के संभावित अंतिम परिणामों को ध्यान में रखें। उदाहरण के लिए, क्लस्टर इंडेक्स में चर-चौड़ाई वाले कॉलम (यहां तक कि गैर-कुंजी कॉलम में भी) को अपडेट करने से पेज स्प्लिट हो सकता है।
करें: उपयुक्त सूचकांक भरण कारकों को लागू करें। डिफ़ॉल्ट भरण कारक सेटिंग पर विखंडन का विश्लेषण करें और सामान्य लोड पर अत्यधिक विखंडन को कम करने के लिए आवश्यकतानुसार समायोजित करें।
SQL सर्वर इंडेक्स फ़्रेग्मेंटेशन को कैसे ठीक करें
चूंकि फ़्रेग्मेंटेशन को 100 प्रतिशत समय रोकना असंभव है, इसलिए यह जानना महत्वपूर्ण है कि यदि प्रदर्शन खराब है तो SQL सर्वर इंडेक्स फ़्रेग्मेंटेशन को कैसे ठीक किया जाए।
इससे पहले कि आप यह तय कर सकें कि आपकी SQL सर्वर अनुक्रमणिका फ़्रेग्मेंटेशन समस्या से कैसे संपर्क किया जाए, आपको पहले यह निर्धारित करना होगा कि आप कितनी व्यापक समस्या से निपट रहे हैं।
शुरू करने के लिए सबसे अच्छी जगह sys.dm_db_index_physical_stats DMF का उपयोग करके आपके इंडेक्स के फ़्रेग्मेंटेशन स्तर का विश्लेषण करना है। एक बार जब आप जान जाते हैं कि सूचकांक विखंडन कितना व्यापक है, तो आप तीन समाधानों में से एक के साथ अपनी हमले की योजना बना सकते हैं:सूचकांक का पुनर्निर्माण करें, सूचकांक को पुनर्गठित करें, या कुछ भी न करें।
पुनर्निर्माण: फ़्रेग्मेंटेशन 30 प्रतिशत से अधिक होने पर अनुक्रमणिकाएँ फिर से बनाएँ।
पुनर्गठन: इंडेक्स को 11-30 प्रतिशत के बीच फ़्रेग्मेंटेशन के साथ पुनर्व्यवस्थित करें।
अनदेखा करें: 10 प्रतिशत या उससे कम के फ़्रेग्मेंटेशन स्तरों को प्रदर्शन समस्या नहीं होनी चाहिए, इसलिए आपको कुछ भी करने की आवश्यकता नहीं है।
SQL सर्वर अनुक्रमणिका फ़्रेग्मेंटेशन अपरिहार्य है, लेकिन आप डेटाबेस प्रदर्शन पर फ़्रेग्मेंटेशन के नकारात्मक प्रभावों को कम कर सकते हैं। कुछ सरल सर्वोत्तम प्रथाओं का पालन करें और किसी भी प्रमुख विखंडन-संबंधी प्रदर्शन समस्याओं को कम करने के लिए अनुसूचित रखरखाव के शीर्ष पर रहें।