एक मेज संकुल अनुक्रमणिका होता है तो सूचकांक है तालिका डेटा (अन्यथा आप एक ढेर प्रकार तालिका है)। क्लस्टर किए गए अनुक्रमणिका का पुन: निर्माण (वास्तव में कोई भी अनुक्रमणिका, लेकिन गैर-संकुल अनुक्रमणिका के लिए स्थान को "डेटा" के रूप में नहीं गिना जाएगा) इसके परिणामस्वरूप आंशिक रूप से उपयोग किए जाने वाले पृष्ठों को अधिक पूर्ण रूप में विलय कर दिया जाएगा।
जैसा कि आप इंडेक्स ऑर्डर पत्ता पृष्ठों में एक इंडेक्स (क्लस्टर या अन्यथा) में डेटा सम्मिलित करते हैं, आवश्यकतानुसार बनाए जाते हैं और आपके पास केवल एक आंशिक पेज होगा: अंत में एक। जब आप इंडेक्स ऑर्डर से डेटा दर्ज करते हैं, तो डेटा को सही जगह फिट करने के लिए एक पेज को विभाजित करने की आवश्यकता होती है: आप दो पृष्ठों के साथ समाप्त होते हैं जो लगभग आधे भरे हुए होते हैं और नई पंक्ति उनमें से एक में जाती है। समय के साथ यह बहुत कुछ हो सकता है, अतिरिक्त स्थान की उचित मात्रा का उपभोग करना, हालांकि एक हद तक भविष्य के आवेषण कुछ अंतराल भर देंगे। गैर-पत्ती पृष्ठों पर भी समान प्रभाव दिखाई देगा, लेकिन वास्तविक डेटा पृष्ठ आकार में कहीं अधिक महत्वपूर्ण हैं।
इसके अलावा डिलीट होने के कारण आंशिक पृष्ठ हो सकते हैं। यदि आप किसी पृष्ठ की सभी पंक्तियों को हटा देते हैं, तो इसे "अप्रयुक्त" के रूप में गिना जाता है, लेकिन यदि इसमें डेटा की एक या अधिक पंक्ति शेष हैं, तो इसे अभी भी उपयोग के रूप में गिना जाता है। यहां तक कि अगर एक पृष्ठ में 10 बाइट्स का उपयोग करने वाली केवल एक पंक्ति है, तो उस पृष्ठ का उपयोग की गई जगह की गिनती में 8192 बाइट्स के रूप में गिना जाता है। फिर से भविष्य के आवेषण कुछ अंतराल को भर सकते हैं।
परिवर्तनशील लंबाई वाली पंक्तियों के लिए, अपडेट का भी एक ही प्रभाव हो सकता है: जैसे-जैसे कोई पंक्ति छोटी होती जाती है, वह अपने पृष्ठ में स्थान छोड़ सकती है, जो बाद में पुन: उपयोग करना आसान नहीं होता है, और यदि लगभग पूर्ण पृष्ठ में कोई पंक्ति लंबी होती है, तो यह पृष्ठ विभाजन को बाध्य कर सकती है ।
एसक्यूएल सर्वर समय का उपयोग करके डेटा को सामान्य करने की कोशिश में समय नहीं बिताता है, पृष्ठों का उपयोग कैसे किया जाता है, जब तक कि स्पष्ट रूप से आपके सूचकांक के आदेश के रूप में इस तरह के बारे में नहीं बताया जाता है, क्योंकि इस तरह के कचरा संग्रह अभ्यास एक प्रदर्शन दुःस्वप्न हो सकते हैं।
मुझे संदेह है कि यह वही है जो आप देख रहे हैं, हालांकि मैं कहूंगा कि ~ 2.7 गुना राशि के लिए पर्याप्त स्थान आवंटित किया जाना चाहिए, जो कि डेटा को विशेष रूप से खराब स्थिति के लिए बिल्कुल आवश्यक है। इसका अर्थ यह हो सकता है कि आपके पास इंडेक्स में एक महत्वपूर्ण कुंजी (यूयूआईडी कॉलम शायद) में से कुछ के रूप में यादृच्छिक है, जिसका अर्थ है कि नई पंक्तियों को इंडेक्स ऑर्डर में कभी भी जोड़ा जाने की संभावना नहीं है, और / या हाल ही में डिलीट की एक महत्वपूर्ण संख्या हुई है।
पेज स्प्लिट उदाहरण
अनुक्रमणिका क्रम में निश्चित लंबाई पंक्तियों के साथ सम्मिलित करना, जिनमें से चार एक पृष्ठ में फिट होते हैं:
Start with one empty page:
[__|__|__|__]
Add the first item in index order:
[00|__|__|__]
Add the next three
[00|02|04|06]
Adding the next will result in a new page:
[00|02|04|06] [08|__|__|__]
And so on...
[00|02|04|06] [08|10|12|14] [16|18|__|__]
अब सूचकांक क्रम से बाहर की पंक्तियों को जोड़ने के लिए (यही कारण है कि मैंने केवल ऊपर भी संख्याओं का उपयोग किया है): जोड़ने 11
का मतलब या तो उस दूसरे पृष्ठ को फैलाना होगा (संभव नहीं जैसा कि वे निश्चित आकार के हैं), सब कुछ 11 से ऊपर बढ़ना (अभी तक बहुत महंगा है) एक बड़ा सूचकांक) या पेज को विभाजित करना जैसे:
[00|02|04|06] [08|10|11|__] [12|14|__|__] [16|18|__|__]
यहाँ से, जोड़ने 13
और 17
परिणाम नहीं होगा क्योंकि वर्तमान में संबंधित पृष्ठों में कमरा है:
[00|02|04|06] [08|10|11|__] [12|13|14|__] [16|17|18|__]
लेकिन 03 वसीयत जोड़ना:
[00|02|03|__] [04|06|__|__] [08|10|11|__] [12|13|14|__] [16|17|18|__]
जैसा कि आप देख सकते हैं, उन सम्मिलित परिचालनों के बाद हमारे पास वर्तमान में 5 डेटा पृष्ठ आबंटित हैं, जो कुल 20 पंक्तियों में फिट हो सकते हैं, लेकिन हमारे पास केवल 14 पंक्तियाँ हैं (अंतरिक्ष का 30% "बर्बाद कर रहे हैं")।
डिफ़ॉल्ट विकल्प के साथ पुनर्निर्माण ("कारक भरें" के बारे में नीचे देखें) में परिणाम होगा:
[00|02|03|04] [06|08|10|11] [12|13|14|16] [17|18|__|__]
इस सरल उदाहरण में एक पृष्ठ को सहेजना। यह देखना आसान है कि कैसे हटाए जाने से आउट-ऑफ-इंडेक्स-ऑर्डर आवेषण के समान प्रभाव हो सकता है।
शमन
यदि आप डेटा को इंडेक्स ऑर्डर के संबंध में काफी यादृच्छिक क्रम में आने की उम्मीद कर रहे हैं, तो FILLFACTOR
SQL सर्वर को कृत्रिम रूप से अंतरालों को छोड़ने के लिए अनुक्रमणिका बनाने या फिर से बनाने के लिए विकल्प का उपयोग कर सकते हैं ताकि बाद में भरने के लिए अंतराल को कम किया जा सके - लंबे समय में पेज विभाजन को कम करना लेकिन शुरू में अधिक स्थान लेना। बेशक इस मूल्य को गलत करना हालात को बेहतर बनाने के बजाय चीजों को और अधिक खराब कर सकता है, इसलिए सावधानी से संभालें।
पृष्ठ विभाजन, विशेष रूप से क्लस्टर किए गए सूचकांक पर, आवेषण / अपडेट के लिए एक प्रदर्शन निहितार्थ हो सकता है इसलिए FILLFACTOR
डेटाबेस में स्थान उपयोग के मुद्दे के बजाय कभी-कभी इसका कारण बनता है जो बहुत अधिक लेखन गतिविधि को देखते हैं (लेकिन अधिकांश एप्लिकेशन के लिए, जहां आउटरहॉट रीड लिखते हैं परिमाण के कई आदेशों से, आप आम तौर पर विशिष्ट मामलों को छोड़कर 100% पर फिल-फैक्टर को छोड़ने से बेहतर हैं, जहां आप प्रभावी रूप से यादृच्छिक सामग्री वाले स्तंभों पर अनुक्रमित करते हैं)।
मुझे लगता है कि अन्य बड़े नाम डीबी के पास एक समान विकल्प है, अगर आपको उनमें इस स्तर के नियंत्रण की आवश्यकता है।
अपडेट करें
ALTER INDEX
उपरोक्त टाइपिंग शुरू करने के बाद प्रश्न में जोड़े गए कथन के बारे में : मेरा मानना है कि विकल्प वही हैं जब सूचकांक पहली बार बनाया गया था (या अंतिम पुनर्निर्माण) लेकिन यदि ऐसा नहीं था तो संपीड़न विकल्प बहुत महत्वपूर्ण हो सकता है समय के आसपास। इसके अलावा उस बयान में फिल्फ़ेक्टर 85% 100% पर सेट नहीं है, इसलिए प्रत्येक पत्ती पृष्ठ पुनर्निर्माण के तुरंत बाद ~ 15% खाली हो जाएगा।