我杀死了一个事务,现在它仍然处于 Killed/Rollback 状态,每当我使用 statusonly 运行 Kill 64 时,我都会得到以下输出:
SPID 64:正在进行事务回滚。预计回滚完成:56%。预计剩余时间:12860 秒。
然而,它保持在 56%,估计时间只会增加。这种情况至少持续了几个小时。
我杀死的查询是 dbcc shrinkdatabase(new2012, 10)
我杀死了一个事务,现在它仍然处于 Killed/Rollback 状态,每当我使用 statusonly 运行 Kill 64 时,我都会得到以下输出:
SPID 64:正在进行事务回滚。预计回滚完成:56%。预计剩余时间:12860 秒。
然而,它保持在 56%,估计时间只会增加。这种情况至少持续了几个小时。
我杀死的查询是 dbcc shrinkdatabase(new2012, 10)
你的数据库有多大?回滚事务比它们尝试执行的操作花费更长的时间并不少见,尤其是在受影响的对象具有依赖关系的情况下。
另一个重要的问题是你在什么环境下运行它?我假设你没有在现场运行它,这会导致更多的问题,特别是: - 你能等多久?- 你能杀死数据库并恢复备份吗?
如果您不能等待很长时间或可能未知的时间,最好的选择可能是简单地恢复备份。如果您不想这样做,则可能需要再等一会儿。您可以使用
sys.dm_exec_requests
DMV 获取有关等待时间、是否被阻止以及可能阻止它的信息。找到可能有用的列后,您可以修改 select 语句以消除垃圾邮件。
有关更多信息,请参阅 Paul Randal(SQL MVP 和作者)关于收缩命令的这篇文章:http ://www.sqlskills.com/blogs/paul/why-lob-data-makes-shrink-run-slooooowly-t -sql-星期二-006/