115

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

可能是什么原因,我该如何立即停止它?

4

12 回答 12

126
sp_who2 'active'

检查CPUTimeDiskIO下的值。注意具有较大值的进程的 SPID。

kill {SPID value}
于 2013-04-10T09:12:38.303 回答
72

可能是什么原因

只要您的注意力可以到达服务器并得到处理,查询就会立即取消。查询必须处于可取消状态,这几乎总是正确的,除非您执行某些操作,例如从 SQLCLR 调用 Web 服务。如果您的注意力无法到达服务器,通常是由于调度程序过载。

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

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

于 2013-04-10T09:19:12.880 回答
45

首先执行以下命令:

sp_who2

之后使用 SPID 执行以下命令,您从上面的命令中获得:

KILL {SPID value}
于 2013-04-10T09:08:53.870 回答
25

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

于 2014-07-25T08:49:44.937 回答
20

如果您取消并看到该运行

 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.
于 2017-06-09T00:15:47.893 回答
15
  1. 首先,您需要使用以下查询显示/检查所有正在运行的查询-

    SELECT text, GETDATE(), *
    FROM sys.dm_exec_requests
    CROSS APPLY sys.dm_exec_sql_text(sql_handle)
    
  2. 查找Session-IdDescription针对所有正在运行的查询,然后复制您要立即终止/停止的特定查询的 Session-Id。

  3. 使用以下查询使用 Session-Id 终止/停止特定查询:

    Kill Session-id
    

    例子:

    kill 125 --125 is my Session-Id
    
于 2020-01-28T07:11:32.920 回答
14

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

于 2016-03-18T06:24:28.947 回答
5

很长一段时间以来,我一直在遭受同样的痛苦。当您连接到远程服务器(可能很慢)或网络连接不佳时,它会特别发生。我怀疑微软是否知道正确的答案是什么。

但是因为我试图找到解决方案。只有一种外行方法有效

  • 单击您正在遭受的查询选项卡上的关闭按钮。过了一会儿(如果微软对你不苛刻!!!)你可能会看到一个窗口问这个

“查询当前正在执行,您要取消查询吗?”

  • 点击“是”

  • 过了一会儿它会问你是否要保存这个查询?

  • 点击“取消”

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

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

PS:这对我有用,如果对你也有用,那就赞一下。!!!

于 2017-12-18T14:25:30.483 回答
2

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

于 2013-10-02T19:14:47.817 回答
2

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

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

于 2017-10-27T20:22:44.797 回答
1

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

于 2015-10-22T10:04:26.147 回答
1

如果使用VSCode mssql 扩展,请单击F1,在提示中输入 mssql,然后选择“取消查询”,如有关扩展的线程中所示。

于 2021-06-10T15:40:38.360 回答