我们目前有一个处于简单恢复模式的 100GB 数据库,它运行在 2008 R2 上。我们有一台安装了 SQL 2016 Enterprise 的新服务器,准备就绪 - 我们正在制定迁移计划,了解如何进行升级。
我们使用 SQL 2016 的数据迁移向导 ( https://www.microsoft.com/en-us/download/details.aspx?id=53595 ) 进行了一次测试,我们用它来指向我们当前的、实时的、生产数据库实例并将数据库恢复到 '16。这花了 15 分钟,考虑到其他方法(备份当前运行的数据库,复制到新服务器),这是非常快的——主要是因为我们无法通过 UNC 路径备份/恢复。
我们已经意识到我们的数据库中有很多旧的/不需要的数据,并且已经开始使用 SQL 代理执行一些删除的一些计划任务,所以当我们接近我们的“上线”日期时我们将有更少的数据驻留在数据库中,我们的想法是我们应该能够用更少的数据更快地将活动实例恢复到'16。
但是,很明显,在我们执行 DB 收缩之前,磁盘上数据库 FILE 的实际大小不会收缩。
出于以下原因,我们正在考虑缩小数据库:
- 更快的备份时间
- 当我们获取生产副本、清理它并恢复到测试环境时,要恢复的文件更少,以便对类似的生产副本执行测试
- 在我们完成这些删除后会有很多剩余空间,所以回收它是有意义的(我在想 ~30-35GB,所以三分之一的数据库本身)
我知道通过缩小数据库,数据库大小会在一段时间后再次增长,但我认为我们之前忽略了数据增长的某些方面,我们已经在这些方面设置了一些流程来减少过多的数据库写入. 我们目前有 75MB 的自动增长,每天大约发生 2-3 次。
这是个好主意吗?我们将恢复我们的数据库,升级 SQL 兼容性级别,然后运行索引重建(使用 Ola Hallengren 的索引脚本)并更新统计信息。我很好奇收缩是否会大大增加这些索引操作时间,因为它会使数据库与我所理解的完全不同。我不确定这里最好的方法是什么——也许不收缩,只在数据迁移后重建 '16 上的索引?
谢谢
我希望以下信息能帮助您做出最终决定。
更快的备份时间
您不会有更快的备份时间。请参阅Aaron Bertrand 的回答。
当我们复制生产副本时要恢复的文件更少
您没有删除任何文件,所以我不确定您在这里获得了什么。是的,您可以通过缩小数据库来节省分配的空间。
在我们完成这些删除后会有很多剩余空间,所以回收它是有意义的(我在想 ~30-35GB,所以三分之一的数据库本身)
这完全取决于,您的公司能否负担得起 30~40 GB 的空间,供您几周/几个月使用,而您无论如何都需要这些空间。您提到您的自动增长设置为 75MB,并且每天发生 2-3 次。根据此信息,您将在接下来的 4.5 个月内使用 30GB 空间。
如果您正在重建索引,请不要在此之后更新所有统计信息。读这个。
我强烈建议您增加自动增长大小并避免每天增长 2-3 次。读这个。