如何立即终止/停止长时间的SQL查询?

我正在使用SQL Server 2008及其pipe理工作室。 我执行了一个查询,产生许多行。 我试图通过红色取消button取消它,但在过去的10分钟内没有停止。 它通常在3分钟内停止。

原因是什么?如何立即停止?

什么可能的原因

查询取消是立即的,只要您的注意力可以到达服务器并进行处理。 查询必须处于可取消状态,除非您执行某些操作(如从SQLCLR调用Web服务),否则几乎总是如此。 如果您的注意力无法到达服务器通常是由于调度器过载。

但是,如果您的查询是必须回滚的事务的一部分,则回滚不能被中断。 如果需要10分钟,那么需要10分钟,对此无能为力。 即使重新启动服务器也无济于事,只会使启动时间更长,因为恢复必须完成回滚。

要回答哪个具体原因适用于您的案例,您需要调查自己。

sp_who2 'active' 

检查CPUTimeDiskIO下的值。 注意比较大的过程的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,然后点击在循环中捕获的程序,它将终止程序。 希望有所帮助。