2013-04-10 1213 views
57

我正在使用SQL Server 2008及其管理工作室。我執行了一個產生許多行的查詢。我試圖通過紅色取消按鈕取消它,但它在過去的10分鐘內沒有停止。它通常在3分鐘內停止。如何立即終止/停止長時間的SQL查詢?

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

+0

你是否檢查過任何應用程序持有此查詢? – user1102001 2013-04-10 09:05:14

+0

停止並重新啓動您的SQL服務.. – user1102001 2013-04-10 09:07:17

+0

我已經面對這個senario,因爲即使我在sql中運行的一切,這是我希望編輯我的proflie或不... – user1102001 2013-04-10 09:09:16

回答

46

什麼可能的原因

查詢取消是即時的,前提是你的attention可以到達服務器並進行處理。查詢必須處於可取消狀態,除非您執行某些操作(如從SQLCLR調用Web服務),否則幾乎總是如此。如果您的注意力無法到達服務器通常是由於scheduler過載。

但是,如果您的查詢是必須回滾的事務的一部分,則不能中斷回滾。如果需要10分鐘,那麼需要10分鐘,對此無能爲力。即使重新啓動服務器也無濟於事,只會使啓動更長,因爲恢復必須完成回滾。

要回答哪個具體的原因適用於你的情況,你需要調查自己。

+0

請注意,只有在收到關注回覆後,SSMS纔會將查詢顯示爲'已取消'(與'試圖取消'相反),這意味着首先排除通訊管道中的所有中間結果(例如,TCP/IP發送/接收緩衝區和所有內存緩衝區)。 – 2013-04-10 09:34:17

+0

我希望它會說'回滾' – 2016-08-01 01:36:43

20

首先執行以下命令:

sp_who2 

之後,隨着SPID,你從上面的命令得到執行以下命令:

KILL {SPID value} 
72
sp_who2 'active' 

校驗值下CPUTIMEDiskIO。注意比較大的過程的SPID。

kill {SPID value} 
+0

我正在使用Microsoft SQL Server 2008 R2,我試圖找出什麼是正在執行的查詢的SPID和被暫停,並發現有相同的SELECT SQL有很多實例相同的SPID。當我嘗試執行命令KILL 114 - 這裏是114暫停查詢的SPID值。 我得到下面的錯誤:請指導。 Msg 102,Level 15,State 1,Line 2 '114'附近語法不正確。 – 2016-06-06 10:40:13

1

顯然在sql server 2008 r2 64bit上,長時間從IIS運行查詢kill spid似乎不起作用,查詢只是一次又一次地重新啓動。似乎是重新使用spid的。該查詢導致sql server不斷地佔用35%的cpu並掛起網站。我猜測BC /它無法迴應登錄其他查詢

+2

我很想看到這個源代碼。 – 2014-01-15 13:34:12

16

這是一種愚蠢的答案,但它至少在我的情況下可靠工作: 在管理工作室,當「取消執行查詢「不停止查詢我只是點擊關閉當前的sql文檔。它詢問我是否想取消查詢,我說是,並且在幾秒內注視它停止執行。之後,它會問我是否要在關閉前保存文檔。在這一點上,我可以單擊取消保持文檔打開並繼續工作。不知道幕後發生了什麼,但它似乎工作。

+2

在這種情況下,查詢可能實際上仍然在後臺運行/掛起,您將不會再看到它。 – Aries51 2015-03-18 14:38:54

+1

我認爲它會終止連接,因爲在此之後您必須重新連接。 – anakic 2015-03-19 08:03:39

+2

它殺死了與SSMS的連接,但不是(必然)到數據庫。 – Aries51 2015-04-21 11:38:22

1

在我的部分,當我試圖關閉它時,我的sql掛起了無盡的運行。所以我做的是打開我的任務管理器並結束任務我的SQL查詢。這停止我的SQL並重新啓動它。

7

您可以使用鍵盤快捷鍵ALT + 中斷停止查詢執行。但是,這可能在所有情況下都不會成功。

3

如果取消,並看到運行

sp_who2 'active' 

(活動監視器將無法使用舊的SQL Server 2000 FYI上)

點你想例如殺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. 
0

一個簡單的答案,如果紅色的「停止」框不起作用,就是嘗試按下鍵盤上的「Ctrl + Break」按鈕。

如果您在Linux上運行SQL Server,則可以將一個應用程序添加到您的系統托盤中,名爲「killall」 只需單擊「killall」按鈕,然後單擊在循環中捕獲的程序將終止程序。 希望有所幫助。

0

我長期以來一直在遭受同樣的事情。當您連接到遠程服務器時(這可能會很慢),或者您的網絡連接較差時,它會特別發生。 我懷疑微軟是否知道正確答案是什麼。

但因爲我試圖找到解決方案。只有1門外行人的工作方式

  • 單擊關閉按鈕在您遭受的查詢選項卡上。 一段時間後(如果微軟不在你苛刻!),你可能會得到一個窗口,詢問這

「查詢當前正在執行。是否要取消查詢?」

  • 「是」

  • 一段時間它會問你是否要保存這個查詢或不經過

    點擊?

  • 點擊「取消」

,並張貼的是,可能是你的工作室再次穩定執行查詢。

它在後臺執行的操作是斷開連接的查詢窗口。因此,要再次運行查詢,需要一段時間才能再次連接遠程服務器。但相信我,這種權衡遠勝於看到永恆運行的計時器所帶來的痛苦。

PS:這適用於我,榮譽如果你也適用。 !