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