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

seq*_*ner 83 sql sql-server sql-server-2008

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

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

Mud*_*san 101

sp_who2 'active'
Run Code Online (Sandbox Code Playgroud)

检查CPUTimeDiskIO下的值.注意比较大的过程的SPID.

kill {SPID value}
Run Code Online (Sandbox Code Playgroud)


Rem*_*anu 59

可能是什么原因

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

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

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

  • 我希望它会说“回滚” (2认同)

小智 39

首先执行以下命令:

sp_who2
Run Code Online (Sandbox Code Playgroud)

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

KILL {SPID value}
Run Code Online (Sandbox Code Playgroud)


ana*_*kic 19

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

  • 在这种情况下,查询可能实际上仍然在后台运行/挂起,您将再也看不到它了. (5认同)
  • 它会杀死与SSMS的连接,但不会(必然)与数据库连接. (2认同)
  • 我确实尝试过这个,我的sql挂了。T_T (2认同)
  • 如果你看不到它,它就不存在。 (2认同)

小智 12

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

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

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

    Kill Session-id
    
    Run Code Online (Sandbox Code Playgroud)

    例子:

    kill 125 --125 is my Session-Id
    
    Run Code Online (Sandbox Code Playgroud)

  • 请通过编辑为您的答案添加一些解释,以便其他人可以从中学习 (2认同)

Yas*_*iya 11

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

  • 这是我在管理工作室工作的。谢谢 (2认同)

Tom*_*kel 11

如果您取消并看到该运行

 sp_who2 'active'
Run Code Online (Sandbox Code Playgroud)

(旧的sql server 2000 FYI上将不提供Activity Monitor)

找到你要杀死的SPID,例如81

Kill 81
Run Code Online (Sandbox Code Playgroud)

sp_who2 'active' 再次运行 ,你可能会注意到它正在睡觉......回滚

为了让STATUS再次运行KILL

Kill 81 
Run Code Online (Sandbox Code Playgroud)

然后你会收到这样的消息

 SPID 81: transaction rollback in progress. Estimated rollback completion: 63%. Estimated time remaining: 992 seconds.
Run Code Online (Sandbox Code Playgroud)


Mau*_*odi 7

很长一段时间以来我一直遭受同样的事情困扰。当您连接到远程服务器(可能很慢)或者网络连接较差时,尤其会发生这种情况。我怀疑微软是否知道正确的答案是什么。

但自从我尝试寻找解决方案。只有一种外行方法有效

  • 单击您遇到的查询选项卡上的关闭按钮。一段时间后(如果微软对你不严厉的话!!!)你可能会看到一个窗口询问这个问题

“查询当前正在执行。您想取消查询吗?”

  • 点击“是”

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

  • 点击“取消”

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

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

PS:这对我有用,如果对你也有用,那就太好了。!!!

  • 仍然为我工作并解决了我的问题 --> (2认同)