恢复暂停的任务

spa*_*k75 3 sql-server rollback

我正在将索引应用于具有存档数据的数据库。我知道这需要很长时间。当我昨晚离开它时,它正在运行 14 小时。今天早上我回到它,企业经理告诉我它已经失去了连接。

在检查服务器上的活动监视器时,我可以看到任务。它的状态是 SUSPENDED,等待类型为 IO_COMPLETION。

有没有办法恢复这个或杀死它并重新开始?

我跑了,sp_who2但它没有被任何其他活动阻止并且状态为 ROLLBACK。如果我然后运行kill 61 with statusonly,SQL 会告诉我;

无法获取状态报告。进程 ID 61 的回滚操作不在进行中。

只是寻找关于我下一步可以做什么/尝试的选项。谢谢。

The*_*war 5

仅以状态杀死 61。SQL 告诉我,无法获取状态报告。进程 ID 61 的回滚操作不在进行中

似乎 Kill With statusonly 报告,仅当会话被手动终止时

来自 Paul Randal :(重点是我的)

仅当会话 ID 或 UOW由于先前的 KILL session ID|UOW 语句而当前正在回滚时,KILL WITH STATUSONLY 才会生成报告。

所以在你的情况下,操作没有被终止..所以你将无法跟踪状态

您可以使用 Sys.dm_Exec_requests 获取回滚估计时间

select percent_complete,estimated_completion_time,* from 
sys.dm_exec_requests 
where status like '%rollback%'
Run Code Online (Sandbox Code Playgroud)

进一步恢复部分,您可以恢复如果您使用的是索引重组而不是重建

有关 reorg 与重建的更多信息(我在 MSDN 上阅读了相关信息,但现在无法找到)

重新组织页面级别的工作,因此如果您碰巧在中间停止,它将回滚该特定页面,即 8kb 而不是整个页面。

因此,如果您不使用 Reorg,唯一的选择是重新启动索引重建,然后重新开始


Eri*_*ing 5

  1. 如果你杀死它,你将不得不将你的进度回滚到很远,这可能需要很长时间。回滚是单线程的。您可能要等待超过 14 个小时才能实现。
  2. 您无法恢复暂停的任务。挂起是 SQL Server 中任务生命周期的一部分。这意味着任务正在运行,但正在等待资源。在您的情况下,该资源是IO_COMPLETION. 您正在等待数据写入磁盘。

任务生命周期的其他部分:

跑步:正是它听起来的样子。您的任务正在进行中。

Runnable:您的任务正在等待获取 CPU。

睡眠:命令已完成,正在等待另一个命令

Pending:您的任务正在等待一个线程

还有一些Background任务,但您通常不必担心这些。

之前工作中的一个简短轶事:其中一位开发人员决定在 9 TB 数据库中的 2 TB 表上推出索引。它运行了整个周末,在周一早上的数据处理工作之前没有完成。我们杀死了它,但是回滚需要很长时间,因此恢复数据库的副本以进行工作会更快。