日期时间聚集索引不断变得碎片化

Moh*_*ath 3 sql-server clustered-index fragmentation datetime sql-server-2014

我有一个名为 CDR 的大表(400 万条记录),用于在 VoIP 系统中存储来自 Cisco 路由器的 CDR(呼叫详细记录),该表不断增长,并且永远不会有无序插入的记录。我们也不更新或删除行。

由于我们的大多数查询都基于发起呼叫的时间,因此我在此列(DATETIME数据类型)上创建了我的主要聚集索引。然而,在短暂的时间后,索引变得碎片化,仅仅一周后,它的碎片化程度就超过了 70%,因此我们需要重建它。我不明白为什么会发生这种情况,因为我们按顺序插入,并且不更新或删除行。

任何减少或消除碎片的建议将不胜感激。

我在装有 Windows Server 2012 的旧 Xenon 服务器上使用 SQL Server 2014 Enterprise 版本。

Mar*_*ith 7

具有不断增加的键的表上仍然可能发生碎片,即使该键本身从不进行更新。

  • 如果文件组与其他对象共享,则分配可能会交错,从而导致碎片。
  • 增加行大小的更新可能会导致页面拆分。
  • 删除会使页面几乎为空并导致内部碎片。

但是你说删除和更新很少或不存在。因此,要在一周内达到 70% 的碎片化,我认为原因必须是收缩数据库任务。看看为什么你不应该缩小你的数据文件

  • @Mohfath 你是怎么确定的?要获得 70% 的碎片化,必须有一些涉及旧页面的活动,并且您还排除了其他可能性。 (3认同)