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

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

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



답변

이유는 무엇일까요

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

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

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


답변

sp_who2 'active'

CPUTimeDiskIO 아래의 값을 확인하십시오 . 상대적으로 큰 값을 갖는 프로세스의 SPID에 유의하십시오.

kill {SPID value}


답변

먼저 아래 명령을 실행하십시오.

sp_who2

그 후 위의 명령에서 얻은 SPID로 아래 명령을 실행하십시오.

KILL {SPID value}


답변

이것은 일종의 어리석은 대답이지만 적어도 내 경우에는 안정적으로 작동합니다. Management Studio에서 “Cancel Executing Query”가 쿼리를 중지하지 않으면 현재 SQL 문서를 닫기 위해 클릭합니다. 쿼리를 취소 할 것인지 묻는 메시지가 표시되고 예라고 말하고 몇 초 후에 실행이 중지됩니다. 그 후 닫기 전에 문서를 저장할 것인지 묻습니다. 이 시점에서 취소를 클릭하여 문서를 열어두고 작업을 계속할 수 있습니다. 뒤에서 무슨 일이 일어나고 있는지 모르겠지만 작동하는 것 같습니다.


답변

취소하고 그 실행을 본다면

 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.


답변

키보드 단축키 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