如何立即终止/停止长时间的SQL查询?
我正在使用SQL Server 2008及其pipe理工作室。 我执行了一个查询,产生许多行。 我试图通过红色取消button取消它,但在过去的10分钟内没有停止。 它通常在3分钟内停止。
原因是什么?如何立即停止?
什么可能的原因
查询取消是立即的,只要您的注意力可以到达服务器并进行处理。 查询必须处于可取消状态,除非您执行某些操作(如从SQLCLR调用Web服务),否则几乎总是如此。 如果您的注意力无法到达服务器通常是由于调度器过载。
但是,如果您的查询是必须回滚的事务的一部分,则回滚不能被中断。 如果需要10分钟,那么需要10分钟,对此无能为力。 即使重新启动服务器也无济于事,只会使启动时间更长,因为恢复必须完成回滚。
要回答哪个具体原因适用于您的案例,您需要调查自己。
sp_who2 'active'
检查CPUTime和DiskIO下的值。 注意比较大的过程的SPID。
kill {SPID value}
首先执行下面的命令:
sp_who2
之后,执行下面的命令与SPID,你从上面的命令:
KILL {SPID value}
这是一个愚蠢的答案,但至less在我的情况下它可靠地工作:在pipe理工作室,当“取消执行查询”不停止查询我只是点击closures当前的SQL文档。 它询问我是否要取消查询,我说是的,并在几秒钟内注视它停止执行。 之后,它询问我是否要在closures之前保存文档。 在这一点上,我可以点击取消保持文档打开并继续工作。 不知道幕后发生了什么,但似乎工作。
您可以使用键盘快捷键ALT + Break来停止查询的执行。 但是,这可能在所有情况下都不会成功。
显然在SQL Server 2008 R2 R2 64位,与从IIS长时间运行的查询kill spid似乎不工作,查询只是重新启动一次又一次。 似乎是重新使用spid的。 查询导致sql server不断地占用35%的cpu并挂起网站。 我猜测BC /它不能回应login的其他查询
在我的部分,当我试图closures它,而无休止地运行时,我的sql挂起了。 所以我做了什么,我打开我的任务pipe理器,并结束我的SQL查询任务。 这停止我的SQL并重新启动它。
如果你取消并看到运行
sp_who2 'active'
(活动监视器将不会在旧的SQL Server 2000 FYI上可用)
发现你希望杀死的SPID例如81
Kill 81
再次运行sp_who2 'active'
,你可能会注意到它正在睡觉…回滚
为了让STATUS再次运行KILL
Kill 81
那么你会得到这样的消息
SPID 81: transaction rollback in progress. Estimated rollback completion: 63%. Estimated time remaining: 992 seconds.
一个简单的答案,如果红色“停止”框不起作用,则尝试按下键盘上的“Ctrl + Break”button。
如果你在Linux上运行SQL Server,那么你可以添加一个应用程序到你的系统中,名为“killall”。点击“killall”button,然后点击在循环中捕获的程序,它将终止程序。 希望有所帮助。