긴 SQL 쿼리를 즉시 종료 / 중지하는 방법은 무엇입니까?


93

SQL Server 2008과 관리 스튜디오를 사용하고 있습니다. 많은 행을 생성하는 쿼리를 실행했습니다. 빨간색 취소 버튼을 눌러 취소하려고했는데 10 분 동안 멈추지 않았습니다. 보통 3 분 이내에 멈 춥니 다.

이유는 무엇이며 즉시 중지하려면 어떻게해야합니까?


응용 프로그램이이 쿼리를 보유하고 있는지 확인 했습니까 ??
user1102001

1
정지하고 다시 SQL 서비스를 다시 시작 ..
user1102001

... 난 SQL 심지어 내가 실행중인 모든으로이 senario에 직면하고 그것을 편집 내 proflie 여부에 나의 소원
user1102001

@ user1102001-당신이 아무것도하도록 강요하지 않습니다. 나는 :)해야하고하지 말라고
sequel.learner

답변:


66

이유는 무엇일까요

주의 가 서버에 도달하여 처리 될 수 있는 경우 쿼리 취소가 즉시 이루어 집니다. 쿼리는 취소 가능한 상태 여야하며, SQLCLR에서 웹 서비스 호출과 같은 특정 작업을 수행하는 경우를 제외하고 거의 항상 참입니다. 주의가 서버에 도달 할 수없는 경우 일반적으로 스케줄러 과부하 때문입니다.

그러나 쿼리가 롤백해야하는 트랜잭션의 일부인 경우 롤백을 중단 할 수 없습니다. 10 분이 걸리면 10 분이 걸리며 할 수있는 일이 없습니다. 서버를 다시 시작해도 도움이되지 않으며 복구가 롤백을 완료해야하므로 시작 시간이 더 길어집니다.

귀하의 사례에 적용 되는 구체적인 이유에 대해 답하려면 직접 조사해야합니다.


SSMS는주의 응답이 수신 된 후에 만 ​​쿼리를 '취소됨'( '취소 시도'와 반대로)으로 표시합니다. 이는 먼저 통신 파이프의 모든 중간 결과를 비우는 것을 의미합니다 (예 : TCP / IP의 모든 결과). 송신 / 수신 버퍼 및 모든 메모리 내 버퍼).
Remus Rusanu 2013-04-10

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에서 "Cancel Executing Query"가 쿼리를 중지하지 않으면 현재 SQL 문서를 닫기 위해 클릭합니다. 쿼리를 취소 할 것인지 묻는 메시지가 표시되고 예라고 말하고 몇 초 후에 실행이 중지됩니다. 그 후 닫기 전에 문서를 저장할 것인지 묻습니다. 이 시점에서 취소를 클릭하여 문서를 열어두고 작업을 계속할 수 있습니다. 뒤에서 무슨 일이 일어나고 있는지 모르겠지만 작동하는 것 같습니다.


5
이 경우 쿼리는 실제로 여전히 백그라운드에서 실행 / 중단 될 수 있으며 더 이상 볼 수 없습니다.
Aries51

1
이 후에 다시 연결해야하므로 연결이 끊어진다고 생각합니다.
anakic

2
SSMS에 대한 연결을 종료하지만 db에 대한 연결은 종료하지 않습니다.
Aries51 2015

1
나는 이것을 내 SQL이 끊었다. T_T
bot

1
볼 수 없다면 존재하지 않는 것입니다.
ChrisD

13

취소하고 그 실행을 본다면

 sp_who2 'active'

(활동 모니터는 이전 SQL Server 2000 FYI에서 사용할 수 없습니다.)

죽이려는 SPID를 찾으십시오. 예 : 81

Kill 81

sp_who2 'active' 다시 실행하면 잠자고 있음을 알게 될 것입니다 ... 롤백

STATUS를 얻으려면 KILL을 다시 실행하십시오.

Kill 81 

그러면 다음과 같은 메시지가 표시됩니다.

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

11

키보드 단축키 ALT+ Break를 사용 하여 쿼리 실행을 중지 할 수 있습니다 . 그러나 이것이 모든 경우에 성공하는 것은 아닙니다.


1
이것은 Management studio에서 저를 위해 일했습니다. 감사합니다
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
다른 사람들이 배울 수 있도록 편집하여 답변에 대한 설명을 추가하십시오
Nico Haase

2

분명히 SQL Server 2008 r2 64bit에서 IIS의 장기 실행 쿼리를 사용하면 kill spid가 작동하지 않는 것 같고 쿼리가 계속해서 다시 시작됩니다. 스파 드를 재사용하는 것 같습니다. 쿼리로 인해 SQL 서버가 35 % CPU를 지속적으로 사용하고 웹 사이트를 중단합니다. bc / 로그인을위한 다른 쿼리에 응답 할 수 없다고 생각합니다.


2
이에 대한 출처를보고 싶습니다.
Ant Swift

1

내 부분에서 끝없이 실행되는 동안 SQL을 닫으려고 할 때 SQL이 끊어졌습니다. 그래서 내가 한 일은 작업 관리자를 열고 SQL 쿼리 작업을 종료하는 것입니다. 이것은 내 SQL을 중지하고 다시 시작했습니다.


1

빨간색 "중지"상자가 작동하지 않는 경우 간단한 대답은 키보드의 "Ctrl + Break"버튼을 눌러 보는 것입니다.

Linux에서 SQL Server를 실행하는 경우 "killall"이라는 시스템 트레이에 추가 할 수있는 앱이 있습니다. "killall"버튼을 클릭 한 다음 루프에 걸린 프로그램을 클릭하면 프로그램이 종료됩니다. 도움이 되었기를 바랍니다.


1

나는 오랫동안 똑같은 고통을 겪어 왔습니다. 특히 원격 서버 (느릴 수 있음)에 연결되어 있거나 네트워크 연결이 불량 할 때 발생합니다. 나는 마이크로 소프트가 정답이 무엇인지 알고 있는지 의심 스럽다.

그러나 나는 해결책을 찾으려고 노력했기 때문에. 단 1 명의 평신도 접근 방식

  • 문제가있는 쿼리 탭 위에있는 닫기 버튼을 클릭합니다. 잠시 후 (Microsoft가 당신에게 가혹하지 않다면 !!!) 당신은 이것을 묻는 창이 나타날 수 있습니다

"쿼리가 현재 실행 중입니다. 쿼리를 취소 하시겠습니까?"

  • "예"를 클릭하십시오.

  • 잠시 후이 쿼리를 저장할지 여부를 묻습니다.

  • "취소"를 클릭하십시오.

그리고 그것을 게시하면 스튜디오가 다시 안정적으로 쿼리를 실행할 수 있습니다.

백그라운드에서 수행하는 작업은 연결로 쿼리 창 연결을 끊는 것입니다. 따라서 쿼리를 다시 실행하려면 원격 서버에 다시 연결하는 데 시간이 걸립니다. 그러나 저를 믿으십시오.이 절충안은 영원 토록 작동하는 타이머를 보는 고통보다 훨씬 낫습니다.

추신 : 이것은 나에게도 효과가 있습니다. !!!


1
여전히 나를 위해 일했고 문제를 해결했습니다->
ErocM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.