DBCC SHOWCONTIG
- 在 SQL Server 2000 中引入sys.dm_db_index_physical_stats
- 在 SQL Server 2005 中引入
问题:在 SQL Server 2000 之外的更高版本的 SQL Server 中,将扫描密度视为性能指标是错误的吗?我正在寻找一个答案,即扫描密度是否是我们在更高版本的 SQL Server(> SQL Server 2000)中应该关注的问题,因为该指标已在 DMV 和函数中推出。
背景:作为供应商要求的一部分,我需要在我的 SQL Server 数据库 (SQL Server 2016) 中保持 90% 以上的扫描密度。
但是,我可以在 Microsoft 站点中看到,DBCC SHOWCONTIG
作为已弃用的功能,它将在 SQL Server 的未来版本中删除,并且我没有看到函数中的 SCAN DENSITY 列sys.dm_db_index_physical_stats
(它是 的替换DBCC SHOWCONTIG
)。
例子:
对于我的一张有 12954223 行的表,以下是具有不同查询的聚集索引(页数 - 830943)的统计信息:
与DBCC SHOWCONTIG
:
Scan density - 76.11 %[103868:106468]
Logical scan fragmentation - 4.68%
和sys.dm_db_index_physical_stats
avg_page_space_used_in_precent - 92.84 %
agg_fragmentation_in_precent - 4.68%
扫描密度是您从一个范围跳到另一个范围的次数(将“最佳”划分为当前状态)。问题是这是逻辑碎片的副作用(在页面之间来回跳转,并且您很可能在范围之间来回跳转)。当 DBCC 被重做为 DMV 时,Paul 清理了那里的很多东西。
如果您首先关心事物的连续性,我建议您改用逻辑碎片(以百分比表示的平均碎片)。也许更有趣的是整页是如何实现的,因为随机与顺序 I/O 可能或多或少与现代硬件无关(预读除外)。
Paul 非常强烈地表达了我们应该如何停止使用旧的 DBCC 并改用 DMV。做一些搜索,你会发现很多好的掘金在那里。这是一个可以为您提供一些见解的线程,例如:https ://social.microsoft.com/Forums/partner/en-US/8d01a374-1493-43c3-8cea-5bf5de723b4d/dmdbindexphysicalstats-and-dbcc-showcontig-差距。