
मैं अपने प्रोजेक्ट पर एक साल से अधिक समय से काम कर रहा हूं और इस साल के दौरान यह एक एप्लिकेशन के रूप में और डेटा में काफी बढ़ा है। यह लगातार नई सुविधाओं का काम रहा है। मैंने शायद ही कभी वापस जाकर कोड को रिफैक्टर किया हो। पिछले हफ्ते मैंने देखा कि कुछ डेटा-भारी पेज धीरे लोड हो रहे थे। सबसे खराब स्थिति में एक व्यू को लोड होने में 30 सेकंड तक का समय लग सकता था। मेरे अधिकतम लोड समय से 10 गुना अधिक…
मुझे भोला कहें, लेकिन मैंने SQL Azure में इंडेक्स फ्रैगमेंटेशन पर विचार नहीं किया था। यह क्लाउड है! यह परिसर की समस्याओं से मुक्त होना चाहिए… जाहिर तौर पर इंडेक्स फ्रैगमेंटेशन भी क्लाउड में एक समस्या है।
मुझे एक MSDN ब्लॉग पर कुछ क्वेरीज़ मिलीं, जो फ्रैगमेंटेड इंडेक्स की पहचान करती हैं और फिर उन्हें रीबिल्ड करती हैं।
इंडेक्स फ्रैगमेंटेशन दिखाने वाली पहली क्वेरी चलाने के बाद मुझे 50 प्रतिशत से अधिक फ्रैगमेंटेशन वाले कुछ इंडेक्स मिले। लेख के अनुसार 10% से अधिक किसी भी चीज़ पर ध्यान देने की आवश्यकता है।
पहली क्वेरी इंडेक्स फ्रैगमेंटेशन प्रदर्शित करती है
--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
लेखक: चक कॉनवे सॉफ्टवेयर इंजीनियरिंग और जेनेरेटिव AI में विशेषज्ञता रखते हैं। उनसे सोशल मीडिया पर जुड़ें: X (@chuckconway) या उन्हें YouTube पर देखें।