DBA谁担心重组或重新建立索引可能会导致数据丢失?


14

我们有些数据库的索引碎片大于95%。尽我所能告诉我们,索引从未重建过,而重组得更少。多年。

(为了公平起见,这些表似乎确实启用了自动更新的统计信息。为了公平起见,他还勤于备份:每天完整,每小时记录trx日志。)

当我询问时,DBA说他不愿意重建或重组索引。当我问为什么时,他不能说清楚。最后,他说他担心潜在的数据丢失。例如,我们的Great Plains Dynamics会计应用程序使用了其中一个数据库,他对此感到非常焦虑。

我不是DBA,但从我的阅读中可以看出,他的焦虑似乎...难以理解。

我不确定下一步该怎么做。建议我应该如何进行?


除非该数据库全天候24/7遭受重创,否则如果世界离线,世界将走向灭亡,那么这种行为是没有借口的。我每周都会在超过12,000个数据库中编写重组和统计信息,而无需三思。在16年的时间里,我仅因控制不当而腐败了一次。
Brain2000 '16

Answers:


22

重建数据库索引不应导致任何数据丢失。但是,由于要重建的索引通常在重建完成之前将不可用,因此可能会导致性能大幅下降。因此,应在受影响的系统处于空闲状态的非工作时间进行此操作。

偏执狂在DBA中是一件好事-如果他们担心数据丢失,我会让他们对备份进行适当的测试(将它们还原到单独的系统中,并确保数据全部存在),以及仍然担心,那么在重建索引之前执行完整备份将是采取的合理预防措施。


11
偏执狂+1是良好的DBA特性
Joel Coel

我完全理解并欣赏健康的偏执狂。测量两次,切一次。我感到困惑的地方似乎是缺乏了解而不是谨慎。与其说“让我们谨慎地决定尝试的方法”,不如说是“不会发生”。我们可以(说)将测试EC2实例与数据副本一起进行假脱机,重新组织索引,对其进行计时,对结果表行进行增量处理以确认没有数据被破坏。那种计划是谨慎的……而不是无所作为?
格雷格·亨德肖特2011年

1
提醒您,索引重组始终在线(在碎片整理期间所有索引均可用),并且索引重建也可以在线(WITH (ONLINE=ON)只要索引不包含BLOB列即可。)
Remus Rusanu

@Greg是的,“让我们不要碰他的索引是如此分散,以至于可能会破坏性能”的思想也使我烦恼-偶尔REINDEX对索引内容发生很大变化的表进行“预防性维护”在我的经验中很常见(如果索引大部分是静态的,那就没什么了)
voretaq7 2011年

@Remus提示-减少性能影响(您仍将具有较高的磁盘I / O,这会使您的速度降低一些,但是至少使用索引的事物仍可以使用它,而不是诉诸顺序扫描)
voretaq7 2011年

6

重建或碎片整理索引不会造成数据丢失的风险。


除非您已有一定程度的数据损坏,否则硬件将出现故障。但是在任何一种情况下,索引碎片都是您最少的担心!
db2

但这不是索引重建造成的损坏,而是其他一些问题。
mrdenny

4

重组索引将花费更少的时间,并且减少了SQL Server的工作量,因此可以在一个工作日的实例类型中完成索引。如果您说的是正确的,那么即使重新组织从未使用过的索引,也可能对服务器造成更大的影响。由于删除和重建索引,重建索引将需要SQL Server的大量工作。在工作日的晚上进行重建不值得承担服务器忙于索引并且不为使用它的人员服务的风险。

我同意voretaq7的意见,如果他担心使用索引,请先在开发或测试服务器上尝试一下,看看其反应如何。


采取的另一种方法可能是显式地DROP INDEX重新创建CREATE INDEX-我不确定SQL Server,但是我知道PostgreSQL有时最好删除索引并从头开始,而不是尝试重建(REINDEX)。
voretaq7 2011年

我很确定在SQL Server上不需要删除和重新创建。
贾斯汀·迪林

@Justin我很确定你是对的(事实上,从我的Sybase时代开始,我就知道重新索引行为实际上是一个drop / create,因此没有像Postgres那样的索引锁定
奇数

重组索引可以花费更少的时间。哪一个花费的时间更长取决于索引的碎片数量。
mrdenny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.