在SQLServer 2008中将新索引部署到超大型表的最佳方法?

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

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

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

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

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

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

目前我只有一些想法。

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

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

这是SQL Server 2008标准版。

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

提问于
用户回答回答于

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

为避免初始备份需要很长时间,您可以在一天内备份并在白天进行移动,然后在维护时段开始时,备份事务日志并将其移至其他位置 - 在此基础上它将变小移动。(这假定批量/完整日志模式)

用户回答回答于

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

扫码关注云+社区