मैं सूचकांक रखरखाव के लिए ओला हॉलेनग्रेंस स्क्रिप्ट का उपयोग करता हूं। इससे पहले कि मैं ऐसा करता, मैंने निम्नलिखित क्वेरी का उपयोग करके देखा कि कौन से सूचकांक सबसे अधिक खंडित हैं:
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc
मेरे मामले में, avg_fragmentation 15 इंडेक्स के लिए 70% से अधिक और 28 इंडेक्स के लिए 30% से अधिक था ।
इसलिए, मैं ओला हॉलेनग्रेन के समाधान का उपयोग करके प्रत्येक सूचकांक का पुनर्निर्माण करता हूं। जब मैंने फिर से क्वेरी चलाई, तो यह परिणाम था:
12 इंडेक्स के लिए 70% से अधिक फ्रैग्मेंटेशन , 15 इंडेक्स के लिए 30% से अधिक ।
मुझे लगा, इसका कारण था page_count
, जो कि प्रत्येक अनुक्रमणिका के लिए 1000 से कम था जो अभी भी बहुत खंडित थे। उदाहरण के लिए,
page_count
967 में से एक इंडेक्स में 98,98% का विखंडन प्रतिशत है ! मेरे लिए, यह उस सूचकांक के पुनर्निर्माण के लायक है! मैंने किया था, और बाद में, विखंडन 0% था । इसके अलावा, page_count
132 के साथ एक सूचकांक 95% से 0% तक चला गया
तो, मेरा प्रश्न यह है कि उन कारणों का पुन: निर्माण न करने के क्या कारण होंगे? एक कारण यह हो सकता है कि पुनर्निर्माण के लिए समय और संसाधन खर्च होते हैं, लेकिन क्योंकि सूचकांक छोटे हैं, इसका मतलब यह नहीं है कि यह अपेक्षाकृत कुछ संसाधनों की लागत है और यह अभी भी इसे फिर से बनाने के लिए विशेष होगा?
इस साइट पर कई संबंधित प्रश्न हैं, लेकिन उनमें से सभी इस सवाल का जवाब देते हैं कि एक सूचकांक डीफ़्रैग्मेंट क्यों नहीं करेगा, या यदि वे अभी भी छोटे हैं तो इंडेक्स उपयोगी हैं और आप उन्हें डीफ़्रैग्मेंट नहीं करते हैं, जबकि यहां कथन में विखंडन कम हो जाता है, सवाल यह है कि ऐसा क्यों नहीं किया जा रहा है?