จะฆ่า / หยุดแบบสอบถาม SQL แบบยาวทันทีได้อย่างไร?


96

ฉันใช้ SQL Server 2008 และสตูดิโอการจัดการ ฉันดำเนินการค้นหาที่ให้ผลหลายแถว ฉันพยายามยกเลิกผ่านปุ่มยกเลิกสีแดง แต่มันยังไม่หยุดในช่วง 10 นาทีที่ผ่านมา โดยปกติจะหยุดภายใน 3 นาที

สาเหตุเกิดจากอะไรและฉันจะหยุดทันทีได้อย่างไร


คุณตรวจสอบแล้วหรือยังว่ามีแอปพลิเคชันใดที่ถือแบบสอบถามนี้อยู่ ??
user1102001

1
หยุดและเริ่มบริการ sql ของคุณใหม่อีกครั้ง ..
user1102001

ฉันได้ประสบ senario นี้เป็นแม้ผมทำงานทุกอย่างใน SQL และมันเป็นความปรารถนาของฉันที่จะแก้ไข proflie ของฉันหรือไม่ ...
user1102001

@ user1102001 - ไม่ได้บังคับให้คุณทำอะไร ฉันบอกว่าสามารถและไม่ควร :)
sequel.learner

คำตอบ:


65

เหตุผลอาจเป็นอย่างไร

การยกเลิกการค้นหาจะเกิดขึ้นทันทีโดยที่ความสนใจของคุณสามารถเข้าถึงเซิร์ฟเวอร์และได้รับการประมวลผล แบบสอบถามต้องอยู่ในสถานะที่ยกเลิกได้ซึ่งมักจะเป็นจริงยกเว้นว่าคุณดำเนินการบางอย่างเช่นการเรียกใช้บริการเว็บจาก SQLCLR หากความสนใจของคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้โดยปกติจะเป็นเพราะตัวกำหนดตารางเวลาทำงานมากเกินไป

แต่ถ้าคำถามของคุณเป็นส่วนหนึ่งของธุรกรรมที่ต้องย้อนกลับการย้อนกลับจะไม่ถูกขัดจังหวะ หากใช้เวลา 10 นาทีก็ต้องใช้เวลา 10 นาทีและไม่มีอะไรที่คุณสามารถทำได้ แม้แต่การรีสตาร์ทเซิร์ฟเวอร์จะไม่ช่วย แต่จะทำให้การเริ่มต้นใช้งานนานขึ้นเท่านั้นเนื่องจากการกู้คืนต้องเสร็จสิ้นการย้อนกลับ

หากต้องการตอบว่าเหตุผลใดที่ใช้กับกรณีของคุณคุณจะต้องตรวจสอบตัวเอง


โปรดทราบว่า SSMS จะแสดงข้อความค้นหาเป็น 'ยกเลิก' (ตรงข้ามกับ 'พยายามยกเลิก') หลังจากได้รับการตอบกลับความสนใจเท่านั้นซึ่งหมายถึงการระบายผลลัพธ์ระดับกลางทั้งหมดในไพพ์การสื่อสารก่อน (เช่นผลลัพธ์ทั้งหมดใน TCP / IP บัฟเฟอร์ส่ง / รับและบัฟเฟอร์ในหน่วยความจำทั้งหมด)
Remus Rusanu

1
ฉันหวังว่ามันจะพูดว่า "ย้อนกลับ"
Simon_Weaver

@RemusRusanu - ถ้าเวลาย้อนกลับโดยประมาณ 20,000+ ชั่วโมงจะเป็นอย่างไร ยินดีที่จะกู้คืนจากข้อมูลสำรอง dba.stackexchange.com/questions/222145/...
youcantryreachingme

110
sp_who2 'active'

ตรวจสอบค่าภายใต้CPUTimeและDiskIO สังเกต SPID ของกระบวนการที่มีค่ามากในเชิงเปรียบเทียบ

kill {SPID value}

ฉันใช้ Microsoft SQL Server 2008 R2 ฉันพยายามค้นหาว่าอะไรคือ SPID ของแบบสอบถามที่กำลังดำเนินการและถูกระงับและพบว่ามีหลายอินสแตนซ์ของ SELECT SQL เดียวกันที่มี SPID เดียวกัน เมื่อฉันพยายามรันคำสั่ง KILL 114 - ที่นี่ 114 คือค่า SPID ของแบบสอบถามที่ถูกระงับของฉัน ฉันได้รับข้อผิดพลาด shon ด้านล่าง: โปรดชี้แนะ ข่าวสารเกี่ยวกับ 102 ระดับ 15 สถานะ 1 บรรทัดที่ 2 ไวยากรณ์ไม่ถูกต้องใกล้ '114'
Code Buster

42

ก่อนอื่นให้ดำเนินการคำสั่งด้านล่าง:

sp_who2

หลังจากนั้นดำเนินการคำสั่งด้านล่างด้วย SPID ซึ่งคุณได้รับจากคำสั่งด้านบน:

KILL {SPID value}

23

นี่เป็นคำตอบที่โง่ ๆ แต่อย่างน้อยก็ใช้ได้ผลอย่างน่าเชื่อถือในกรณีของฉัน: ในสตูดิโอการจัดการเมื่อ "ยกเลิกการดำเนินการสืบค้น" ไม่หยุดการสืบค้นฉันเพียงแค่คลิกเพื่อปิดเอกสาร sql ปัจจุบัน มันถามฉันว่าฉันต้องการยกเลิกการสืบค้นหรือไม่ฉันตอบว่าใช่และดูเถิดในไม่กี่วินาทีมันก็จะหยุดทำงาน หลังจากนั้นระบบจะถามฉันว่าต้องการบันทึกเอกสารก่อนปิดหรือไม่ ณ จุดนี้ฉันสามารถคลิกยกเลิกเพื่อเปิดเอกสารและทำงานต่อไปได้ ไม่รู้ว่าเบื้องหลังเกิดอะไรขึ้น แต่ดูเหมือนว่าจะได้ผล


5
ในกรณีนี้แบบสอบถามอาจยังคงทำงาน / แขวนอยู่เบื้องหลังคุณจะไม่เห็นอีกต่อไป
Aries51

1
ฉันคิดว่ามันจะฆ่าการเชื่อมต่อเนื่องจากคุณต้องเชื่อมต่อใหม่หลังจากนี้
anakic

2
มันฆ่าการเชื่อมต่อกับ SSMS แต่ไม่ (จำเป็น) กับ db
ราศี

1
ฉันลองสิ่งนี้ sql ของฉันวางสาย T_T
บอ

1
ถ้ามองไม่เห็นแสดงว่าไม่มี
ChrisD

14

หากคุณยกเลิกและเห็นการทำงานนั้น

 sp_who2 'active'

(การตรวจสอบกิจกรรมจะไม่พร้อมใช้งานบนเซิร์ฟเวอร์ sql เก่า 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.

ฉันต้องวิ่งKILL {spid} WITH STATUSONLYไปดูข้อความสถานะ
Rudey

11

คุณสามารถใช้แป้นพิมพ์ลัดALT+ Breakเพื่อหยุดการดำเนินการสืบค้น อย่างไรก็ตามอาจไม่ประสบความสำเร็จในทุกกรณี


1
อันนี้ใช้ได้กับฉันใน Management studio ขอบคุณ
Vishvanathsinh Solanki

5
--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
โปรดเพิ่มคำอธิบายในคำตอบของคุณโดยแก้ไขเพื่อให้ผู้อื่นสามารถเรียนรู้ได้
Nico Haase

2

เห็นได้ชัดว่าบน sql server 2008 r2 64bit โดยมีการสืบค้นจาก IIS เป็นเวลานานดูเหมือนว่า kill spid จะไม่ทำงานการสืบค้นจะเริ่มต้นใหม่ครั้งแล้วครั้งเล่า และดูเหมือนว่าจะนำสไปดมาใช้ซ้ำ ข้อความค้นหาทำให้เซิร์ฟเวอร์ sql ใช้ cpu 35% ตลอดเวลาและหยุดเว็บไซต์ ฉันคาดเดา bc / มันไม่สามารถตอบสนองต่อการค้นหาอื่น ๆ สำหรับการเข้าสู่ระบบ


2
ฉันชอบที่จะเห็นแหล่งที่มาของสิ่งนี้
Ant Swift

1

ในส่วนของฉัน sql ของฉันวางสายเมื่อฉันพยายามปิดในขณะที่ทำงานอย่างไม่มีที่สิ้นสุด สิ่งที่ฉันทำคือเปิดตัวจัดการงานของฉันและสิ้นสุดภารกิจการสืบค้น sql ของฉัน สิ่งนี้หยุด sql ของฉันและเริ่มต้นใหม่


1

คำตอบง่ายๆถ้าช่อง "หยุด" สีแดงไม่ทำงานคือให้ลองกดปุ่ม "Ctrl + Break" บนแป้นพิมพ์

หากคุณใช้ SQL Server บน Linux มีแอปที่คุณสามารถเพิ่มลงในซิสเต็มของคุณชื่อ "killall" เพียงคลิกที่ปุ่ม "killall" จากนั้นคลิกที่โปรแกรมที่ติดอยู่ในลูปและโปรแกรมจะยุติการทำงานของโปรแกรม หวังว่าจะช่วยได้


1

ฉันทุกข์ทรมานจากสิ่งเดียวกันมานานแล้ว มันเกิดขึ้นเป็นพิเศษเมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล (ซึ่งอาจช้า) หรือคุณมีการเชื่อมต่อเครือข่ายที่ไม่ดี ฉันสงสัยว่า Microsoft รู้หรือไม่ว่าคำตอบที่ถูกต้องคืออะไร

แต่เนื่องจากฉันได้พยายามหาวิธีแก้ปัญหา วิธีการของฆราวาสเพียง 1 วิธีเท่านั้นที่ใช้ได้ผล

  • คลิกปุ่มปิดเหนือแท็บแบบสอบถามที่คุณกำลังได้รับความเดือดร้อน หลังจากนั้นไม่นาน (ถ้า Microsoft ไม่รุนแรงกับคุณ !!!) คุณอาจได้รับหน้าต่างถามสิ่งนี้

"กำลังดำเนินการค้นหาคุณต้องการยกเลิกการสืบค้นหรือไม่"

  • คลิกที่ "ใช่"

  • หลังจากนั้นไม่นานมันจะถามว่าคุณต้องการบันทึกแบบสอบถามนี้หรือไม่?

  • คลิกที่ "ยกเลิก"

และโพสต์สิ่งนั้นอาจเป็นเพราะสตูดิโอของคุณมีเสถียรภาพอีกครั้งในการดำเนินการค้นหาของคุณ

สิ่งที่ทำในพื้นหลังคือการยกเลิกการเชื่อมต่อหน้าต่างแบบสอบถามของคุณด้วยการเชื่อมต่อ ดังนั้นในการเรียกใช้แบบสอบถามอีกครั้งจะต้องใช้เวลาในการเชื่อมต่อเซิร์ฟเวอร์ระยะไกลอีกครั้ง แต่เชื่อฉันเถอะว่าการยอมแลกครั้งนี้ดีกว่าความทุกข์ทรมานจากการได้เห็นตัวจับเวลาซึ่งดำเนินไปชั่วนิรันดร์

PS:สิ่งนี้ใช้ได้กับฉันความรุ่งโรจน์ถ้าเหมาะกับคุณด้วย !!!


1
ยังคงใช้งานได้สำหรับฉันและแก้ไขปัญหาของฉันเมื่อ ->
ErocM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.