আমি সূচি রক্ষণাবেক্ষণের জন্য ওলা হ্যালেনগ্রেনস স্ক্রিপ্ট ব্যবহার করি। আমি এটি করার আগে, নিম্নলিখিত সূত্রগুলি সর্বাধিক খণ্ডিত হয় তা দেখার জন্য আমি নিম্নলিখিত কোয়েরিটি ব্যবহার করেছি:
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
আমার ক্ষেত্রে, গড় সূচক 15 সূচকের জন্য 70% এর বেশি এবং 28 এর জন্য 30% এর বেশি ছিল সূচকের ।
সুতরাং, আমি ওলা হ্যালেনগ্রেনের সমাধান ব্যবহার করে প্রতিটি সূচি পুনর্নির্মাণ করি। আমি আবার যখন ক্যোয়ারী চালালাম, তখন এটি ফলাফল ছিল:
ওভার ফ্র্যাগমেন্টেশন 70% জন্য 12 ইনডেক্স, ওভার 30% জন্য 15 ইনডেক্স।
আমি বুঝতে পেরেছিলাম, কারণটি ছিল page_count
, যা প্রতিটি সূচকের জন্য 1000 এর চেয়ে কম ছিল যা এখনও খুব খণ্ডিত ছিল। উদাহরণস্বরূপ,
page_count
967 এর সাথে সূচকগুলির একটিতে 98,98% ভাগের ভাগ রয়েছে ! আমার কাছে, এটি সূচকটি পুনর্নির্মাণের জন্য উপযুক্ত বলে মনে হচ্ছে! আমি করেছি, এবং তার পরে, খণ্ডটি 0% ছিল । এছাড়াও, page_count
132 এর একটি সূচক 95% থেকে 0% এ চলেছে
সুতরাং, আমার প্রশ্ন হল, সেই সূচকগুলি পুনর্নির্মাণ না করার কী কারণ থাকতে পারে? একটি কারণ হতে পারে যে পুনর্নির্মাণে সময় এবং সংস্থান ব্যয় হয়, তবে সূচীগুলি ছোট হওয়ায় এটির তুলনামূলকভাবে কয়েকটি সংস্থান ব্যয় হয় না এবং যাইহোক এটি পুনর্নির্মাণ করা এখনও বেন্ফেশিয়াল হবে?
এই সাইটে একাধিক সম্পর্কিত প্রশ্ন রয়েছে তবে তারা সকলেই এই প্রশ্নের উত্তর দেয় যে একটি সূচক কেন ডিফ্র্যাগমেন্ট করবে না, বা সূচকগুলি যদি ছোট হয় তবে আপনি সেগুলি ডিফল্ট করেন না, তবে এখানে বিবৃতিটি খণ্ডনকে হ্রাস করে, প্রশ্ন হচ্ছে, যাইহোক এটি কেন করবেন না?