在SQL Server 2008中将新索引部署到非常大的表的最佳方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我有一个生产数据库,其中一个表格已经变得非常大(大量的累积数据)。

为了提高查询性能,我使用了提供新索引的sql server优化器。

所以我制作了一个生产数据库的副本进行测试,它确实提高了性能,但是我的问题是,创建索引需要大约24小时,并且在创建索引时应用程序无法使用。

对于这个特定的应用程序,停机几个小时不是问题,但是24小时的停机时间将是,我正在寻找一种方法来创建此索引而不必这样做。

目前我只有一些想法。

一个想法是将备份复制到另一台服务器。应用新索引和其他更改。将备份复制回生产服务器。自从我进行备份后,将应用程序关闭并合并任何新数据。

当然,这有其自身的一系列问题,例如不得不将数据合并到一起,所以我不喜欢这个想法。

这是SQL Server 2008标准版。

我通常通过脚本部署数据库更改。

提问于
用户回答回答于

鉴于VM机器上没有足够的处理能力,再加上无可置疑的IO吞吐量,我实际上会考虑计算备份时间,恢复到一个体面的服务器,索引,然后备份/恢复到VM机。

为避免初始备份需要很长时间,可以在一天内备份并在白天进行移动,然后在维护时段开始时,备份事务日志并将其移至其他位置 - 在此基础上它将变小移动。

用户回答回答于

如果你使用的是Enterprise,则可以使用ONLINE选项CREATE INDEX构建索引,而不必在表上保留长期锁定。关于它的使用有一些警告; 有关详细信息,请参阅链接的文章,您可能会发现性能影响太大。但是,如你所说,你使用的是标准。

虚拟机的这一事实立即让人想到暂时“提升”虚拟机或甚至暂时迁移到最大化的非虚拟机。对于在一张非常大的桌子上重建索引,我认为RAM和I / O速度是最大的因素; 是直接使用驱动器的虚拟机还是虚拟驱动器?你可以将数据临时重定位到物理驱动器吗?

扫码关注云+社区