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


93

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

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


您是否检查过任何应用程序正在保存此查询?
user1102001

1
停止并再次重新启动您的sql服务
。–

我已经遇到了这个问题,甚至我都在sql中运行所有内容,所以我希望编辑我的个人资料...
user1102001

@ user1102001-不强迫您执行任何操作。我说可以,不应该:)
sequel.learner 2013年

Answers:


66

可能是什么原因

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

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

要回答哪种特殊原因适用于您的案子,您需要进行调查。


请注意,SSMS仅在收到关注回复后才将查询显示为“已取消”(与“尝试取消”相对),这意味着首先清空通信管道中的所有中间结果(例如,TCP / IP中的所有结果)发送/接收缓冲区和所有内存缓冲区)。
Remus Rusanu

1
我希望它会说“回滚”
Simon_Weaver

@RemusRusanu-如果预计的回滚时间为20,000+小时,该怎么办?很高兴从备份中还原。dba.stackexchange.com/questions/222145/…–
youcantryreachingme

108
sp_who2 'active'

检查CPUTimeDiskIO下的值。请注意,过程的SPID具有较大的价值。

kill {SPID value}

我正在使用Microsoft SQL Server 2008 R2,我试图找出正在执行并被挂起的查询的SPID是什么,并发现具有相同SPID的相同SELECT SQL的实例很多。当我尝试执行命令KILL 114时-这里114是挂起查询的SPID值。我收到以下错误提示:请指导。消息102,级别15,状态1,第2行'114'附近的语法不正确。
Code Buster

40

首先执行以下命令:

sp_who2

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

KILL {SPID value}

22

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


5
在这种情况下,查询实际上可能仍在后台运行/挂起,您将不会再看到它。
Aries51 2015年

1
我认为这会终止连接,因为在此之后您必须重新连接。
anakic

2
它会终止与SSMS的连接,但不会(不必)终止与数据库的连接。
Aries51 2015年

1
我确实尝试过此操作,但我的sql挂断了。T_T
bot

1
如果看不到它,则不存在。
克里斯迪

13

如果您取消并看到该运行

 sp_who2 'active'

(活动监视器在旧的SQL Server 2000 FYI上将不可用)

发现您想杀死的SPID,例如81

Kill 81

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

要使状态再次运行,请执行“杀死”操作

Kill 81 

然后您会收到这样的消息

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


3
--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

请通过编辑它的答案来添加一些解释,以便其他人可以从中学习
Nico Haase

2

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


2
我希望看到此消息的来源。
Ant Swift 2014年

1

就我而言,当我试图不断运行时将其关闭时,我的sql挂起了。所以我要做的就是打开任务管理器并结束SQL查询任务。这将停止我的sql并重新启动它。


1

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

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


1

很久以来我一直在遭受同样的事情。当您连接到远程服务器(可能很慢)或网络连接不良时,会发生这种情况。我怀疑微软是否知道正确的答案。

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

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

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

  • 点击“是”

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

  • 点击“取消”

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

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

PS:这对我有用,如果您也对我也很满意。!!!


1
仍然为我工作,并从->
ErocM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.