我正在使用SQL Server 2008及其管理工作室。我执行了产生许多行的查询。我试图通过红色的“取消”按钮将其取消,但在过去的10分钟内仍未停止。通常会在3分钟内停止。
原因可能是什么?如何立即停止?
我正在使用SQL Server 2008及其管理工作室。我执行了产生许多行的查询。我试图通过红色的“取消”按钮将其取消,但在过去的10分钟内仍未停止。通常会在3分钟内停止。
原因可能是什么?如何立即停止?
Answers:
可能是什么原因
只要您的注意力可以到达服务器并得到处理,查询就会立即取消。查询必须处于可取消状态,几乎总是如此,除非您执行某些操作,例如从SQLCLR调用Web服务。如果您的注意力无法到达服务器,通常是由于调度程序过载。
但是,如果您的查询是必须回滚的事务的一部分,则回滚不能中断。如果需要10分钟,那么它需要10分钟,您无能为力。即使重新启动服务器也无济于事,只会延长启动时间,因为恢复必须完成回滚。
要回答哪种特殊原因适用于您的案子,您需要进行调查。
sp_who2 'active'
检查CPUTime和DiskIO下的值。请注意,过程的SPID具有较大的价值。
kill {SPID value}
这是一个愚蠢的答案,但是至少在我的情况下它可以可靠地工作:在Management Studio中,当“取消执行查询”没有停止查询时,我只需单击以关闭当前sql文档。它询问我是否要取消查询,我说是,然后在几秒钟后停止执行。之后,它询问我是否要在关闭之前保存文档。此时,我可以单击“取消”以保持文档打开并继续工作。不知道幕后发生了什么,但似乎可行。
如果您取消并看到该运行
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.
您可以使用键盘快捷键ALT+ Break停止查询执行。但是,这可能并非在所有情况下都成功。
--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
显然在sql server 2008 r2 64bit上,随着IIS长时间运行的查询,kill spid似乎不起作用,查询只是一次又一次地重新启动。而且似乎在重复使用spid的 查询导致sql server不断占用35%的cpu并挂起网站。我猜BC /它无法响应其他查询登录
很久以来我一直在遭受同样的事情。当您连接到远程服务器(可能很慢)或网络连接不良时,会发生这种情况。我怀疑微软是否知道正确的答案。
但自从我尝试找到解决方案以来。只有一种外行方法有效
“查询当前正在执行。是否要取消查询?”
点击“是”
一段时间后,它将询问您是否要保存此查询?
点击“取消”
并发布可能是您的工作室再次稳定执行查询的信息。
它在后台执行的操作是通过连接断开查询窗口。因此,要再次运行查询,将需要一段时间才能再次连接远程服务器。但是请相信我,这种权衡远比看到那个永恒的计时器所带来的痛苦要好得多。
PS:这对我有用,如果您也对我也很满意。!!!