In my last post I was discussing how and why clicking on the Fragmentation tab on the properties page of an index could take a while to return results. I identified it as a DBCC since sp_who2 as well as being identified as a DBCC command by querying
SELECT * FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
I guess the point I was trying to make was that index fragmentation stats don’t seem to be cached anywhere (why would they be since they are changing all the time) and must be calculated each time you click on the Fragmentation tab – or perform DBCC SHOWCONTIG – or query db_dm_physical_index_stats. This means that on deep tables, these queries can take some time. I’m not working with an amazing disk subsystem and the server I’m working on only has two processors. So for me – for sure – they take a while.
If you don’t mind waiting for SSMS to finish the query to see the results, that’s great. I had accidentally clicked on it and needed SSMS to release the thread so that that SSMS would operate properly. I’m hoping that I was showing how to deal with SSMS hanging on this page when your data set is large.
Thanks to Simon Worth for pointing this out. He is completely correct. DBCC SHOWCONTIG has been retired for using db_dm_physical_index_stats instead. SSMS is making a SELECT to db_dm_physical_index_stats and not really calling DBCC SHOWCONTIG. I wouldn’t be suprised if under the covers that both DBCC SHOWCONTIG and a call to db_dm_physical_index_stats are doing the exact same operations to figure out what the fragmentation stats are. Microsoft has just put a new front end on to DBCC SHOWCONTIG so that it looks more like a regular T-SQL SELECT statement.