如何恢复 350 GB 的未分配空间

DBO*_*BOn 3 performance database-design sql-server shrink sql-server-2014

我的数据库初始大小为 370GB。

当我检查时EXEC sp_spaceused,我可以看到几乎 360GB 的未分配空间。

未分配的空间是否意味着未使用的空间?如果它是未使用的空间,为什么会导致存储问题?

除了使用 360GB 的未分配空间缩小 .mdf 文件之外,我还有哪些选择?

另外,由于这是一个巨大的数据库,我可以在下面的“x”位置提到什么级别的增量 - 每次缩小时我可以从 10,000 MB 开始吗?

USE Demo
GO
DBCC SHRINKFILE (N ‘Demo’, x)
GO
Run Code Online (Sandbox Code Playgroud)

在这种情况下,还有什么我应该考虑的吗?

添加新的数据文件会有帮助吗?

Jos*_*ell 5

你知道这个应用程序/数据库发生的一切吗?

想象一下这个场景:

  • 贵公司有一位非常重要的人需要获得(每日 | 每月 | 每季度 | 年度)财务报告
  • 这些报告由计划作业生成
  • 此作业在数据库中生成数百 GB 的数据 - 创建工作表、处理数字等
  • 之后,作业通过删除(或截断 + 重建)工作表来“清理”自己
    • 这会导致数据库中有大量未使用的空间 - 但文件的大小不会改变
  • 有一天,一位 DBA 出现并缩小了这个数据库
  • 在未来的某一天,这个报告工作试图运行 - 但它会因为文件必须一遍又一遍地增长而停止
  • 甚至可能工作失败,或者延迟太久以至于开始影响正常工作时间内的性能
  • 非常重要的人很生气,因为他们没有重要的报告,每个人都在向他们抱怨系统慢

你不希望这种情况发生,是吗?


说了这么多,如果你确定数据库:

  • 真的不需要这个空间,而且
  • 永远不会使用这个空间,因为它不会那么快地获取数据,并且
  • 您对此驱动器上的空间有实际需求(按 GB 支付给云供应商、其他应用程序需要空间的昂贵 SAN 等),

然后无论如何,缩小它。

可能在首次创建此数据库时文件大小有误(有人在“37”的末尾添加了 0 - poof,370 GB 的数据库文件)。

也许有一次永远不会再发生的一次性数据加载/删除导致数据库增长到这个大小。


如果这样做,请务必考虑与 SHRINKFILE 一起使用的“目标大小”。您说它只有 10 GB 的已用空间,但我不会立即将其设置为 10 GB - 您正在将一些数据放入此数据库中,对吗?