Làm thế nào để giết / dừng một truy vấn SQL dài ngay lập tức?


93

Tôi đang sử dụng SQL server 2008 và studio quản lý của nó. Tôi đã thực hiện một truy vấn tạo ra nhiều hàng. Tôi đã cố gắng hủy nó thông qua nút hủy màu đỏ, nhưng nó vẫn chưa dừng lại trong 10 phút qua. Nó thường dừng trong vòng 3 phút.

Lý do có thể là gì và làm thế nào để tôi dừng nó ngay lập tức?


bạn đã kiểm tra xem có ứng dụng nào đang giữ truy vấn này không ??
user1102001

1
dừng và khởi động lại dịch vụ sql của bạn một lần nữa ..
user1102001

tôi đã phải đối mặt với senario này như thậm chí tôi đã chạy tất cả mọi thứ trong sql và đó là mong muốn của tôi để chỉnh sửa proflie của tôi hay không ...
user1102001

@ user1102001 - không bắt bạn làm bất cứ điều gì. Tôi đã nói có thể và không nên :)
theo.learner

Câu trả lời:


66

Lý do có thể là gì

Việc hủy truy vấn diễn ra ngay lập tức, với điều kiện là sự chú ý của bạn có thể đến được máy chủ và được xử lý. Truy vấn phải ở trạng thái có thể hủy, điều này hầu như luôn đúng trừ khi bạn thực hiện các thao tác nhất định như gọi dịch vụ web từ SQLCLR. Nếu sự chú ý của bạn không thể đến máy chủ thường là do quá tải của bộ lập lịch .

Nhưng nếu truy vấn của bạn là một phần của giao dịch phải khôi phục thì việc khôi phục không thể bị gián đoạn. Nếu mất 10 phút thì cần 10 phút và bạn không thể làm gì được. Ngay cả việc khởi động lại máy chủ cũng sẽ không giúp ích được gì mà chỉ khiến quá trình khởi động lâu hơn vì quá trình khôi phục phải hoàn tất quá trình khôi phục.

Để trả lời lý do cụ thể áp dụng cho trường hợp của bạn, bạn sẽ cần phải điều tra chính mình.


Lưu ý rằng SSMS hiển thị truy vấn là 'đã hủy bỏ' (Trái ngược với 'đang cố gắng hủy bỏ') chỉ sau khi nhận được phản hồi chú ý, điều này ngụ ý rút hết các kết quả trung gian trong đường ống liên lạc trước (ví dụ: tất cả các kết quả trong TCP / IP bộ đệm gửi / nhận và tất cả bộ đệm trong bộ nhớ).
Remus Rusanu

1
Tôi ước nó sẽ nói 'quay trở lại'
Simon_Weaver

@RemusRusanu - Điều gì sẽ xảy ra nếu thời gian khôi phục ước tính là hơn 20.000 giờ? Rất vui khi khôi phục từ bản sao lưu. dba.stackexchange.com/questions/222145/…
youcantryreachingme

108
sp_who2 'active'

Kiểm tra các giá trị trong CPUTimeDiskIO . Lưu ý rằng SPID của quá trình có giá trị tương đối lớn.

kill {SPID value}

Tôi đang sử dụng Microsoft SQL Server 2008 R2, tôi đã cố gắng tìm ra SPID của truy vấn đang được thực thi và bị tạm ngưng là gì và nhận thấy rằng có nhiều trường hợp của cùng một SELECT SQL có cùng SPID. Khi tôi cố gắng thực hiện lệnh KILL 114 - ở đây 114 là giá trị SPID của truy vấn bị treo của tôi. Tôi gặp lỗi shon dưới đây: Vui lòng hướng dẫn. Msg 102, Mức 15, Trạng thái 1, Dòng 2 Cú pháp không chính xác gần '114'.
Code Buster

40

Đầu tiên thực hiện lệnh dưới đây:

sp_who2

Sau đó, thực hiện lệnh dưới đây với SPID, mà bạn nhận được từ lệnh trên:

KILL {SPID value}

22

Đây là một câu trả lời ngớ ngẩn, nhưng ít nhất nó hoạt động đáng tin cậy trong trường hợp của tôi: Trong phòng thu quản lý, khi "Hủy thực thi truy vấn" không dừng truy vấn, tôi chỉ cần nhấp để đóng tài liệu sql hiện tại. nó hỏi tôi có muốn hủy truy vấn hay không, tôi nói có, và xin hãy xem trong vài giây nó sẽ ngừng thực thi. Sau đó, nó hỏi tôi có muốn lưu tài liệu trước khi đóng hay không. Tại thời điểm này, tôi có thể nhấp vào Cancel để giữ cho tài liệu mở và tiếp tục làm việc. Không biết chuyện gì đang xảy ra ở hậu trường, nhưng nó có vẻ hoạt động.


5
Trong trường hợp này, truy vấn có thể thực sự vẫn đang chạy / bị treo ở chế độ nền, bạn sẽ không thấy nó nữa.
Aries51

1
Tôi nghĩ rằng nó giết chết kết nối, vì bạn phải kết nối lại sau đó.
anakic

2
Nó giết kết nối với SSMS nhưng không (nhất thiết) với db.
Aries51

1
Tôi đã thử điều này, sql của tôi bị treo. T_T
bot

1
Nếu bạn không thể nhìn thấy nó, nó không tồn tại.
ChrisD

13

Nếu bạn hủy và thấy rằng chạy

 sp_who2 'active'

(Activity Monitor sẽ không khả dụng trên máy chủ sql 2000 FYI cũ)

Tìm SPID bạn muốn giết, ví dụ: 81

Kill 81

Chạy sp_who2 'active' lại lần nữa và có thể bạn sẽ nhận thấy nó đang ngủ ... lăn ra sau

Để có được TÌNH TRẠNG chạy lại, hãy KILL

Kill 81 

Sau đó, bạn sẽ nhận được một thông báo như thế này

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

11

Bạn có thể sử dụng phím tắt ALT+ Breakđể dừng thực thi truy vấn. Tuy nhiên, điều này có thể không thành công trong mọi trường hợp.


1
Cái này được làm việc cho tôi trong Studio quản lý. Cảm ơn
Vishvanathsinh Solanki

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

1
Vui lòng thêm một số giải thích cho câu trả lời của bạn bằng cách chỉnh sửa nó để những người khác có thể học hỏi từ nó
Nico Haase

2

dường như trên sql server 2008 r2 64bit, với truy vấn chạy dài từ IIS, kill spid dường như không hoạt động, truy vấn chỉ được khởi động lại nhiều lần. và nó dường như đang sử dụng lại spid's. truy vấn khiến máy chủ sql liên tục chiếm 35% cpu và treo trang web. Tôi đoán bc / nó không thể trả lời các truy vấn khác để đăng nhập


2
Tôi muốn xem một nguồn cho điều này.
Ant Swift

1

Phần tôi, sql của tôi bị treo khi tôi cố gắng đóng nó trong khi chạy liên tục. Vì vậy, những gì tôi đã làm là tôi mở trình quản lý tác vụ của mình và kết thúc tác vụ truy vấn sql của tôi. Điều này dừng sql của tôi và khởi động lại nó.


1

Một câu trả lời đơn giản, nếu hộp "dừng" màu đỏ không hoạt động, là hãy thử nhấn các nút "Ctrl + Break" trên bàn phím.

Nếu bạn đang chạy SQL Server trên Linux, có một ứng dụng bạn có thể thêm vào hệ thống của mình có tên "killall" Chỉ cần nhấp vào nút "killall" và sau đó nhấp vào chương trình bị mắc kẹt và nó sẽ kết thúc chương trình. Hy vọng rằng sẽ giúp.


1

Tôi đã phải chịu đựng điều tương tự từ lâu. Điều này đặc biệt xảy ra khi bạn được kết nối với máy chủ từ xa (Máy chủ có thể chậm) hoặc bạn có kết nối mạng kém. Tôi nghi ngờ liệu Microsoft có biết câu trả lời đúng là gì không.

Nhưng vì tôi đã cố gắng tìm ra giải pháp. Chỉ có 1 cách tiếp cận giáo dân hoạt động

  • Nhấp vào nút đóng trên tab truy vấn mà bạn đang gặp phải. Sau một thời gian (Nếu Microsoft không khắc nghiệt với bạn !!!), bạn có thể nhận được một cửa sổ hỏi điều này

"Truy vấn hiện đang được thực thi. Bạn có muốn hủy truy vấn không?"

  • Nhấp vào "Có"

  • Sau một lúc nó sẽ hỏi bạn có muốn lưu truy vấn này hay không?

  • Nhấp vào "Hủy"

Và đăng điều đó, có thể studio của bạn đã ổn định trở lại để thực hiện truy vấn của bạn.

Những gì nó làm trong nền là ngắt kết nối cửa sổ truy vấn của bạn với kết nối. Vì vậy, để chạy lại truy vấn, sẽ mất thời gian để kết nối lại máy chủ từ xa. Nhưng hãy tin tôi sự đánh đổi này tốt hơn nhiều so với sự đau khổ khi nhìn thấy bộ đếm thời gian chạy vĩnh viễn.

Tái bút: Điều này phù hợp với tôi, Kudos nếu cũng phù hợp với bạn. !!!


1
Vẫn làm việc cho tôi và giải quyết vấn đề của tôi kể từ ->
ErocM
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.