我们使用 SQL Server 2008 R2 标准版(我们无法在所有生产数据库服务器上负担企业版),并且必须定期维护生产服务器中的关键索引(重建/重组)。问题是,由于我们使用的是标准版,我们无法访问重建索引在线选项。如果我们在重建这些关键索引时不限制对数据库的访问,我们会收到许多超时错误,因为索引在重建期间基本上被禁用。我使用过诸如Ola Hallengren 的 Index Optimize script 之类的脚本,但这似乎并不能解决我的问题。
我想要解决这个问题的方法是在索引碎片时重建索引,而不是在索引碎片时创建一个单独的索引副本(即 IX_some_name_temp),一旦完成,删除原始碎片索引并最后重命名副本索引回到原来的名字。我希望的是,在构建新索引时,Sql Server 可以使用原始索引(有些碎片索引),然后在构建新临时索引后,它可以开始使用那个索引,然后我们删除碎片索引并重命名和下次我们必须运行预定的作业时,我们将返回原始状态。
我的问题是,这种方法有意义吗?在我删除原始碎片索引时,sql server 是否能够使用我的新临时索引副本?任何提示或可能的其他策略表示赞赏。
假设这些是非聚集索引,那么
CREATE INDEX
BOL 上讨论离线操作的主题表明这种方法应该只部分起作用,因为它将允许对表进行只读访问,但仍会阻止更新。相关部分如下(强调我的)我认为您必须升级到企业版并进行在线重建或接受索引维护期间会有一些超时。