Skip to content

পোস্ট

SQL Azure-তে ইন্ডেক্স ফ্র্যাগমেন্টেশন, কে জানত!

২৬ এপ্রিল, ২০১৫ • 2 মিনিট পড়া

SQL Azure-তে ইন্ডেক্স ফ্র্যাগমেন্টেশন, কে জানত!

আমি আমার প্রকল্পে এক বছরেরও বেশি সময় ধরে কাজ করছি এবং এটি বছরের সময় একটি অ্যাপ্লিকেশন এবং ডেটা হিসাবে উল্লেখযোগ্যভাবে বৃদ্ধি পেয়েছে। এটি নিরন্তর নতুন বৈশিষ্ট্য। আমি খুব কমই ফিরে গিয়ে কোড রিফ্যাক্টর করেছি। গত সপ্তাহে আমি লক্ষ্য করেছি যে কিছু ডেটা-ভারী পৃষ্ঠা ধীরে ধীরে লোড হচ্ছে। সবচেয়ে খারাপ ক্ষেত্রে একটি ভিউ লোড হতে ৩০ সেকেন্ড পর্যন্ত সময় নিতে পারে। আমার সর্বোচ্চ লোড সময়ের চেয়ে ১০ গুণ বেশি…

আমাকে নিষ্কপট বলুন, কিন্তু আমি SQL Azure-তে ইন্ডেক্স ফ্র্যাগমেন্টেশন বিবেচনা করিনি। এটি ক্লাউড! এটি প্রাঙ্গণ সমস্যার জন্য প্রতিরোধী হওয়া উচিত… স্পষ্টতই ইন্ডেক্স ফ্র্যাগমেন্টেশন ক্লাউডেও একটি সমস্যা।

আমি একটি MSDN ব্লগে কয়েকটি প্রশ্ন খুঁজে পেয়েছি, যা ফ্র্যাগমেন্টেড ইন্ডেক্সগুলি চিহ্নিত করে এবং তারপরে সেগুলি পুনর্নির্মাণ করে।

ইন্ডেক্স ফ্র্যাগমেন্টেশন দেখানোর জন্য প্রথম প্রশ্ন চালানোর পরে আমি ৫০ শতাংশেরও বেশি ফ্র্যাগমেন্টেশন সহ কিছু ইন্ডেক্স খুঁজে পেয়েছি। নিবন্ধ অনুযায়ী ১০% এর বেশি কিছুর মনোযোগ প্রয়োজন।

প্রথম প্রশ্ন ডিসপ্লে ইন্ডেক্স ফ্র্যাগমেন্টেশন

--Get the fragmentation percentage

SELECT
 DB_NAME() AS DBName
,OBJECT_NAME(ps.object_id) AS TableName
,i.name AS IndexName
,ips.index_type_desc
,ips.avg_fragmentation_in_percent
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.indexes i
ON ps.object_id = i.object_id
AND ps.index_id = i.index_id
CROSS APPLY sys.dm_db_index_physical_stats(DB_ID(), ps.object_id, ps.index_id, null, 'LIMITED') ips
ORDER BY ps.object_id, ps.index_id

দ্বিতীয় প্রশ্ন ইন্ডেক্সগুলি পুনর্নির্মাণ করে

--Rebuild the indexes
DECLARE @TableName varchar(255)

DECLARE TableCursor CURSOR FOR
(
 SELECT '[' + IST.TABLE_SCHEMA + '].[' + IST.TABLE_NAME + ']' AS [TableName]
 FROM INFORMATION_SCHEMA.TABLES IST
 WHERE IST.TABLE_TYPE = 'BASE TABLE'
 )

 OPEN TableCursor
 FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0

 BEGIN
 PRINT('Rebuilding Indexes on ' + @TableName)
Begin Try
 EXEC('ALTER INDEX ALL ON ' + @TableName + ' REBUILD with (ONLINE=ON)')
End Try
Begin Catch
 PRINT('Cannot do rebuild with Online=On option, taking table ' + @TableName+' down for douing rebuild')
 EXEC('ALTER INDEX ALL ON ' + @TableName + ' REBUILD')
 End Catch
FETCH NEXT FROM TableCursor INTO @TableName
END

CLOSE TableCursor
DEALLOCATE TableCursor

উৎস

লেখক: চাক কনওয়ে একজন এআই ইঞ্জিনিয়ার যার কাছে প্রায় ৩০ বছরের সফটওয়্যার ইঞ্জিনিয়ারিং অভিজ্ঞতা রয়েছে। তিনি ব্যবহারিক এআই সিস্টেম তৈরি করেন—কন্টেন্ট পাইপলাইন, অবকাঠামো এজেন্ট এবং সরঞ্জাম যা বাস্তব সমস্যার সমাধান করে—এবং তার শেখার বিষয়গুলি শেয়ার করেন। তার সাথে সোশ্যাল মিডিয়ায় সংযোগ করুন: X (@chuckconway) অথবা তাকে YouTube এবং SubStack এ দেখুন।

↑ শীর্ষে ফিরে যান

আপনি এটিও পছন্দ করতে পারেন