收缩或不收缩的困境

use*_*148 5 sql-server shrink fragmentation ssd

我有数据库,我的任务是将两个数据库 DBName1 和 DBName2 移动到 SSD,而我在 SSD 上只有有限的空间来容纳这些数据库。出于显而易见的原因,我不想缩小日志或数据文件,Brent 或 Paul 可能会去疯狂的。我注意到数据库没有增长太多,它使用的是最初分配的一部分。日志文件的初始大小分别为当前大小 41GB 和 147GB。当我检查 DBCC SQLPERF(logspace) 时,我发现 41017.3 MB 日志大小和 0.4339632 % 日志空间使用 % 和状态 0 147474MB 日志大小和 0.08165617 日志空间使用 % 和状态 0。

Database Name   Log Size (MB)   Log Space Used (%)  Status
 DBNAme1            41017.3      0.4339632           0


 DBName2          147474        0.08165617           0

Database files(Sp_Spaceused)

database_name   database_size   unallocated space
DBName1         126294.31 MB    67443.73 MB

reserved    data    index_size  unused
18261272 KB 8347376 KB  9677480 KB  236416 KB

database_name   database_size   unallocated space
DBName2        271075.31 MB      115074.44 MB

reserved    data    index_size  unused
8731200 KB  5634520 KB  12976 KB    3083704 KB
Run Code Online (Sandbox Code Playgroud)

你觉得我该怎么做。我需要能够使用 SSD。是否值得缩小,或者您是否考虑其他回收可用空间的方法?我知道缩小是最后的手段。

小智 2

冒着发表不受欢迎声明的风险,我认为缩小规模对你来说可能是一个不错的选择。让我解释...

缩小数据库数据文件几乎肯定会导致碎片。这对于生产数据库至关重要,因为您可能没有时间在收缩后对数据库进行碎片整理。

不过,听起来你还有一些空闲时间。也许您可以将数据库恢复到非生产服务器上,您将有充足的时间和资源来缩小数据库并进行碎片整理。然后您可以将这些数据库迁移到 SSD。

当然这需要时间。您可能需要在生产中保留日志备份,以便可以前滚更改,或者可能设置复制之类的功能来保持数据同步。

会对其他人的想法以及你最终选择做什么感兴趣。

  • 收缩是在线操作,因此无需在中断期间执行此操作。我会捕获日志计数器,以了解您在高峰时间实际使用了多少 - 例如重建、最大并发时间等。掌握这些信息后,您可以做出明智的决定。不过,总的来说,如果“正确”使用,收缩并不是“坏”,而不是作为一种拐杖或下意识的反应。 (2认同)