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

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

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

452446 次浏览

首先执行以下命令:

sp_who2

然后用 SPID 执行下面的命令,这是从上面的命令中获得的:

KILL {SPID value}
sp_who2 'active'

检查 CPU 时间DiskIO下的值。注意有较大值的进程的 SPID。

kill {SPID value}

究竟是什么原因

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

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

To answer 哪个 specific reason applies to your case, you'll need to investigate yourself.

显然,在 sql server 2008 r264位上,由于 IIS 的长时间运行查询,kill spid 似乎无法工作,查询只能一次又一次地重新启动。它似乎在重复使用蜘蛛的。查询导致 sql 服务器持续占用35% 的 CPU 并挂起网站。我猜测 BC/它不能响应其他登录查询

这个答案有点傻,但至少对我来说是可靠的: 在管理工作室中,当“ Cancel Execting Query”没有停止查询时,我只需单击关闭当前 sql 文档。它问我是否要取消查询,我说是,然后几秒钟后它就停止执行了。之后,它会询问我是否要在关闭之前保存文档。此时,我可以单击“取消”以保持文档处于打开状态并继续工作。不知道幕后发生了什么,但似乎奏效了。

在我的部分,当我无休止地奔跑时试图关闭它时,我的鳞挂起来了。所以我打开我的任务管理器,结束我的 sql 查询。这停止我的 sql 和重新启动它。

你可以使用快捷键 ALT + Break来停止查询的执行。不过,这种方法可能不会在所有情况下都成功。

如果您取消并看到运行

 sp_who2 'active'

(活动监视器在旧的 sql 服务器2000FYI 上不可用)

找出你想杀死的 SPID,例如81

Kill 81

再次运行 sp_who2 'active',您可能会注意到它正在休眠... ... 回滚

让状态再次运行 KILL

Kill 81

然后你会收到这样的信息

 SPID 81: transaction rollback in progress. Estimated rollback completion: 63%. Estimated time remaining: 992 seconds.

A simple answer, if the red "stop" box is not working, is to try pressing the "Ctrl + Break" buttons on the keyboard.

如果您在 Linux 上运行 SQLServer,有一个应用程序可以添加到系统寄存器中,名为“ kill all” Just click on the "killall" button and then click on the program that is caught in a loop and it will terminate the program. 希望能帮上忙。

很久以来我一直遭受着同样的痛苦。特别是当您连接到远程服务器(可能比较慢) ,或者网络连接较差时,这种情况就会发生。 我怀疑微软是否知道正确的答案。

但自从我试图找到解决办法以来,只有一种门外汉的方法奏效了

  • 单击查询选项卡上的关闭按钮。 After a while (If Microsoft is not harsh on you !!!) you might get a window asking this

“查询当前正在执行。是否取消查询?”

  • 点击“是”

  • 过一会儿,它会询问您是否要保存此查询?

  • 点击“取消”

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

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

PS: This works for me, Kudos if works for you too. !!!

  1. 首先,您需要使用下面的 query-显示/检查所有正在运行的查询

    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
    

如果使用 < strong > < a href = “ https://markplacee.visalstudio.com/item? itemName = ms-mssql.mssql”rel = “ nofollow noReferrer”> VSCode mssql  ,单击 F1,在提示符中写入 mssql 并选择“取消查询”,如 这个关于扩展的线程所示。

我的工作室版本 : Microsoft SQL Server 管理工作室18

我手动 关闭计算机网卡,无限循环查询成功终止!