patternsqlModerate
Index Fragmentation - Am I interpreting the results correctly?
Viewed 0 times
thefragmentationinterpretingresultsindexcorrectly
Problem
I'm not a DBA, but I'm responsible for a database that currently has hundreds of tables and ~5TB of data. I recently ran the following query, in hopes of determining index fragmentation:
The first 30-40 rows of the result set looks as follows (after importing into Excel):
This was very startling to me. Am I reading this correctly, that I have all these indexes, actually a lot more, that are 100% fragmented? Is my query correct?
Declare @DatabaseId Int = DB_ID('ODS')
SELECT
OBJECT_NAME(T.OBJECT_ID) as TableName,
T2.Name as IndexName,
T.index_id as IndexId,
index_type_desc as IndexType,
index_level as IndexLevel,
avg_fragmentation_in_percent as AverageFragmentationPercent,
avg_page_space_used_in_percent as AveragePageSpaceUsedPercent,
page_count as PageCount
FROM sys.dm_db_index_physical_stats (@DatabaseId, NULL, NULL, NULL, 'DETAILED') T
INNER JOIN [sys].[indexes] T2 ON T.index_id = T2.index_id And T.object_id = T2.object_id
ORDER BY avg_fragmentation_in_percent DESCThe first 30-40 rows of the result set looks as follows (after importing into Excel):
This was very startling to me. Am I reading this correctly, that I have all these indexes, actually a lot more, that are 100% fragmented? Is my query correct?
Solution
Yes, that's what it looks like. Unless there is some error happening with the data after it got moved to Excel.
However, these are all tiny, tiny tables. Stop caring about fragmentation on tables with less than, say, 1,000 pages.* And even then you probably shouldn't care too much until another order or two of magnitude, and even less if you are using SSD and/or your database fits into memory even with the fragmentation.
The work that you'll spend reorganizing them will not have the impact you expect, and the benefit from any changes you actually see, temporarily, will not justify it at all. I would simply filter such small tables out of your queries right from the start.
However, these are all tiny, tiny tables. Stop caring about fragmentation on tables with less than, say, 1,000 pages.* And even then you probably shouldn't care too much until another order or two of magnitude, and even less if you are using SSD and/or your database fits into memory even with the fragmentation.
The work that you'll spend reorganizing them will not have the impact you expect, and the benefit from any changes you actually see, temporarily, will not justify it at all. I would simply filter such small tables out of your queries right from the start.
* 1,000 pages is just my ballpark, pull a number out of your you-know-what suggestion. There is no magic number for this. But seriously, for small tables, focus your efforts elsewhere.Context
StackExchange Database Administrators Q#115943, answer score: 10
Revisions (0)
No revisions yet.