SQL Server 2008과 관리 스튜디오를 사용하고 있습니다. 많은 행을 생성하는 쿼리를 실행했습니다. 빨간색 취소 버튼을 눌러 취소하려고했는데 10 분 동안 멈추지 않았습니다. 보통 3 분 이내에 멈 춥니 다.
이유는 무엇이며 즉시 중지하려면 어떻게해야합니까?
답변
이유는 무엇일까요
주의 가 서버에 도달하여 처리 될 수 있는 경우 쿼리 취소가 즉시 이루어 집니다. 쿼리는 취소 가능한 상태 여야하며, SQLCLR에서 웹 서비스 호출과 같은 특정 작업을 수행하는 경우를 제외하고 거의 항상 참입니다. 주의가 서버에 도달 할 수없는 경우 일반적으로 스케줄러 과부하 때문입니다.
그러나 쿼리가 롤백해야하는 트랜잭션의 일부인 경우 롤백을 중단 할 수 없습니다. 10 분이 걸리면 10 분이 걸리며 할 수있는 일이 없습니다. 서버를 다시 시작해도 도움이되지 않으며 복구가 롤백을 완료해야하므로 시작 시간이 더 길어집니다.
귀하의 사례에 적용 되는 구체적인 이유에 대해 답하려면 직접 조사해야합니다.
답변
sp_who2 'active'
CPUTime 및 DiskIO 아래의 값을 확인하십시오 . 상대적으로 큰 값을 갖는 프로세스의 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
