作为一名 SQL Server DBA,我有定期重建/重组索引的维护工作。最近,我问自己 SQL Server 中的表碎片问题。然后我阅读了有关堆表及其碎片的文章。我们不断以各种方式检查 SQL 服务器的状态,我想知道添加对表碎片的检查是否有用。
我正在考虑开发类似的东西:“它们是集群索引吗?” 是 -> 什么都不做,不 -> 所以检查:
percentage of fragmentation > x%
numbers of forward pointing > x
numbers of rows > x
Run Code Online (Sandbox Code Playgroud)
如果 x > 某些值,则发出警报。
您如何看待设置这种检查,有用与否?
堆表的碎片整理会减少磁盘上数据库文件的物理大小吗?
编辑 :
我最终使用这段代码来检测需要重建的堆表:
SELECT Database_id, Object_name([object_id]) as TableName, Index_type_desc,
Avg_fragmentation_in_percent, rowmodctr, forwarded_record_count
From sys.dm_db_index_physical_stats(db_id(),object_id(''),null,null,'detailed') AS SDDIPS
Inner join sys.sysindexes AS SI on SDDIPS.[object_id] = SI.id
AND SDDIPS.index_id = SI.indid
--Inner join sysobjects AS SO on SI.id = SO.id
Where index_level = 0 AND …Run Code Online (Sandbox Code Playgroud)