删除大部分数据后缩小+重新索引是否不好?

Ale*_*xei 2 index sql-server shrink sql-server-2017

我有一个在 SQL Server 2017 Express 上运行的测试环境,它只使用最近的数据(一个作业每月一次删除超过三个月的数据)。

该作业执行以下操作:

  1. 使用 while 循环,它删除了超过三个月的数据
  2. 缩小数据库,如果其大小高于某个阈值
  3. 重新索引所有表

这篇文章描述了由于索引碎片而缩小数据库是多么糟糕,以及为什么重新索引也需要额外的空间。

上次运行从 9GB 数据库开始。删除需要 3-4 分钟,重新索引大约需要 30 秒。数据库减少到大约 5GB。

由于这是一个测试环境,我可以承受这种停机时间而不会出现任何问题。

问题:在删除了很大一部分数据后收缩 + 重新索引是不是很糟糕?

Aar*_*and 11

好吧,问问自己:缩小有什么意义,如果您知道重新索引(以及任何其他数据更改,真的)会在缩小后再次扩展文件?

即使重新索引不会将其恢复到 9GB,如果数据库将来会增长,我认为临时回收一些磁盘空间的价值绝对为零。在数据库必须再次增长之前,您将如何处理该空间?租出去然后驱逐他们?这就像餐厅每次顾客起床和离开时都会拆卸桌子,只有在新顾客到来时才重新组装。

在您的情况下(由于您选择的许可证而没有其他原因,您需要将数据文件保持在 10GB 以下),为了再次增长到 9GB 而降到 5GB 是没有意义的。我宁愿有一些活动监视器,当数据文件再次回到 9GB 空间时(或者只是将其保持在 9GB!)并且使用的空间实际上接近 9GB ,它会警告您。

不要将其视为“保留最近三个月”的要求,而是将其视为“保留 9GB 数据”的要求。无论如何,随着每个时间段(天/周/任何)的数据量上升,您都必须重新审视。当您在三个月内积累超过 10GB 的数据时会发生什么?