如果我取消索引重组任务,是不是有可能导致数据库损坏?

Posted

技术标签:

【中文标题】如果我取消索引重组任务,是不是有可能导致数据库损坏?【英文标题】:Is there a chance of database corruption if I cancel a index reorganize task?如果我取消索引重组任务,是否有可能导致数据库损坏? 【发布时间】:2014-10-22 00:25:16 【问题描述】:

在计划的维护窗口中,我手动重建/重组了 SQL Server 2012 数据库的一些索引。这是一项离线任务,因为我的 SQL Server 许可证不允许在线重建/重组。

所以,我有一个相当大的表,有 10,000,000 行。它有 14% 的碎片,我使用 MS SQL Server Management Studio 重新组织索引。

我的问题是重组操作需要 10 分钟才能完成(绿色标记和成功标志),但 Management Studio 窗口尚未关闭。我等了3个小时,仅此而已。正在执行的纺车还在转。

我现在该怎么办?强制关闭窗口?强制关闭 Management Studio 窗口?我很担心,因为活动监视器显示 tempdb 中仍有一个正在运行的查询,我担心会损坏表。

如何找到当前任务?我的目标是确定在生产数据库中强制关闭 Management Studio 是否安全。

注意:我已经在另一台具有最近备份和相同 CPU/RAM 的机器上测试了相同的操作。整个操作只用了 15 分钟。

感谢任何建议。

【问题讨论】:

您是否检查过此时存在的任何死锁。理想情况下,如果没有死锁,它应该在 15 分钟左右完成。 活动监视器没有显示任何死锁。 看看 sys.dm_exec_requests 和 sys.dm_os_waiting_tasks 看看它在等待什么。但总的来说,您的问题的答案是“不,您不会通过取消来破坏您的数据库”。每个操作都被 SQL Server 记录下来,包括您的索引维护。当您取消时,它必须回滚已完成的所有操作(这也需要时间),但这样做不会破坏数据库。 【参考方案1】:

索引重组始终在线。索引重组在内部也以小批量工作,经常提交。它可以随时被中断,下一次运行将从上次提交的地方恢复(严格来说将从头开始,但实际工作将从中断的地方恢复,没有任何中间更改)。如果中断,回滚不会有很大的积压。再一次,这仅适用于 REORGANIZE

现在我无法帮助您阻止 SSMS,而且您现在可能已经做出了决定。但我说,您越早学会避免使用 Management Studio 的内置可视化工具,您的生活就会越好。运行 T-SQL 命令。

此外,许多人建议使用Ola Hallengren 的索引维护脚本。

【讨论】:

【参考方案2】:

否,但索引可能已损坏。如果是这样,您可以删除它并重新构建它。

【讨论】:

索引不会因为重组而简单地损坏。如果索引损坏,则您的数据库已损坏。在实际损坏的情况下,您需要运行DBCC CHECKDB,而不是简单地重建索引。 如果索引损坏,引擎就不要使用它。您可以删除并重新创建它。 您会想知道为什么索引已损坏。除了引擎中的严重错误之外,SQL Server 本身不会随机损坏索引。如果遇到损坏的索引,请运行DBCC CHECKDB,检查您的硬件和软件状况并考虑从备份中恢复数据库。损坏的索引不太可能是您唯一的问题,只是重新创建它会掩盖真正的问题。

以上是关于如果我取消索引重组任务,是不是有可能导致数据库损坏?的主要内容,如果未能解决你的问题,请参考以下文章

Alter Index Organize 是不是会导致统计数据过时?

SqlServer2008R2重组索引

git add导致损坏的索引错误

Flutter中如何取消任务

BufferedInputStream.read(byte[] b, int off, int len) 可以返回 0 吗?是不是有可能导致这种情况的重要的、损坏的 InputStreams?

git索引损坏