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

时间:2013-04-10 09:03:39

标签: sql sql-server sql-server-2008

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

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

12 个答案:

答案 0 :(得分:92)

sp_who2 'active'

检查 CPUTime DiskIO 下的值。请注意比较大的过程的SPID。

kill {SPID value}

答案 1 :(得分:56)

  

原因是什么

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

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

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

答案 2 :(得分:34)

首先执行以下命令:

sp_who2

之后使用SPID执行以下命令,该命令来自上面的命令:

KILL {SPID value}

答案 3 :(得分:18)

这是一个愚蠢的答案,但它至少在我的情况下可靠地运作: 在管理工作室中,当“取消执行查询”没有停止查询时,我只需单击关闭当前的sql文档。它询问我是否要取消查询,我说是的,并且在几秒钟内它停止执行。之后,它询问我是否要在关闭之前保存文档。此时,我可以单击“取消”以保持文档处于打开状态并继续工作。不知道幕后发生了什么,但似乎有效。

答案 4 :(得分:11)

您可以使用键盘快捷键 ALT + Break 来停止查询执行。但是,在所有情况下都可能不会成功。

答案 5 :(得分:10)

如果您取消并查看该运行

 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.

答案 6 :(得分:5)

--Find Session Id for respective all running queries
SELECT text, getdate(),*
 FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)

---Kill specific session
kill 125

答案 7 :(得分:2)

显然在sql server 2008 r2 64bit上,来自IIS的长时间运行查询kill kill似乎不起作用,查询只是一次又一次地重新启动。它似乎正在重复使用spid。该查询导致sql server不断占用35%的cpu并挂起网站。我猜bc /它无法响应登录的其他查询

答案 8 :(得分:1)

在我的部分,当我试图在无休止地运行时关闭它时,我的sql挂了。所以我做的是打开我的任务管理器并结束我的SQL查询任务。这停止我的SQL并重新启动它。

答案 9 :(得分:1)

一个简单的答案,如果红色“停止”框不起作用,则尝试按下键盘上的“Ctrl + Break”按钮。

如果您在Linux上运行SQL Server,则可以添加一个名为“killall”的系统托盘的应用程序 只需单击“killall”按钮,然后单击循环中捕获的程序,它将终止程序。 希望有所帮助。

答案 10 :(得分:0)

我长期遭遇同样的事情。它特别发生在您连接到远程服务器(可能很慢)或网络连接不良时。 我怀疑微软是否知道正确答案是什么。

但是,因为我试图找到解决方案。只有1个外行人的方法才有效

  • 点击您遇到的查询标签上的关闭按钮。 过了一会儿(如果微软对你没有苛刻!!!)你可能会有一个窗口问这个

"查询当前正在执行。要取消查询吗?"

  • 点击"是"

  • 一段时间后,它会询问您是否要保存此查询?

  • 点击"取消"

然后发布,可能是你工作室再次稳定以执行你的查询。

它在后台执行的操作是断开查询窗口与连接。因此,要再次运行查询,再次连接远程服务器需要一些时间。但请相信我,这种权衡比看到那个永恒运行的计时器的痛苦要好得多。

PS:这适合我,Kudos如果适合你的话。 !!!

答案 11 :(得分:0)

如果使用VSCode mssql Extension,点击F1,在提示中写入mssql并选择“取消查询”,如图this thread about the extension