긴 SQL 쿼리를 즉시 종료 / 중지하는 방법은 무엇입니까?
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 문서를 닫기 위해 클릭하기 만하면됩니다. 쿼리를 취소 할 것인지 묻는 메시지가 표시되고 예라고 말하고 몇 초 후에 실행이 중지됩니다. 그 후 닫기 전에 문서를 저장할 것인지 묻습니다. 이 시점에서 취소를 클릭하여 문서를 열어두고 작업을 계속할 수 있습니다. 뒤에서 무슨 일이 일어나고 있는지 모르겠지만 작동하는 것 같습니다.
키보드 단축키 ALT+ Break를 사용 하여 쿼리 실행을 중지 할 수 있습니다 . 그러나 이것이 모든 경우에 성공하는 것은 아닙니다.
취소하고 그 실행을 본다면
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.
분명히 SQL Server 2008 r2 64bit에서 IIS의 장기 실행 쿼리를 사용하면 kill spid가 작동하지 않는 것 같고 쿼리가 계속해서 다시 시작됩니다. 스파 드를 재사용하는 것 같습니다. 쿼리로 인해 SQL 서버가 35 % CPU를 지속적으로 사용하고 웹 사이트를 중단합니다. bc / 로그인을위한 다른 쿼리에 응답 할 수 없다고 생각합니다.
내 부분에서 끝없이 실행되는 동안 SQL을 닫으려고 할 때 SQL이 끊어졌습니다. 그래서 내가 한 일은 작업 관리자를 열고 SQL 쿼리 작업을 종료하는 것입니다. 이것은 내 SQL을 중지하고 다시 시작했습니다.
빨간색 "중지"상자가 작동하지 않는 경우 간단한 대답은 키보드의 "Ctrl + Break"버튼을 눌러 보는 것입니다.
Linux에서 SQL Server를 실행하는 경우 "killall"이라는 시스템 트레이에 추가 할 수있는 앱이 있습니다. "killall"버튼을 클릭 한 다음 루프에 걸린 프로그램을 클릭하면 프로그램이 종료됩니다. 도움이 되었기를 바랍니다.
나는 오랫동안 똑같은 고통을 겪어 왔습니다. 특히 원격 서버 (느릴 수 있음)에 연결되어 있거나 네트워크 연결이 불량 할 때 발생합니다. 나는 마이크로 소프트가 정답이 무엇인지 알고 있는지 의심 스럽다.
그러나 나는 해결책을 찾으려고 노력했기 때문에. 단 1 명의 평신도 접근 방식
- 문제가있는 쿼리 탭 위에있는 닫기 버튼을 클릭합니다. 잠시 후 (Microsoft가 당신에게 가혹하지 않다면 !!!) 당신은 이것을 묻는 창이 나타날 수 있습니다
"쿼리가 현재 실행 중입니다. 쿼리를 취소 하시겠습니까?"
"예"를 클릭하십시오.
After a while it will ask to whether you want to save this query or not?
Click on "Cancel"
And post that, may be you're studio is stable again to execute your query.
What it does in background is disconnecting your query window with the connection. So for running the query again, it will take time for connecting the remote server again. But trust me this trade-off is far better than the suffering of seeing that timer which runs for eternity.
PS: This works for me, Kudos if works for you too. !!!
참고URL : https://stackoverflow.com/questions/15921458/how-to-kill-stop-a-long-sql-query-immediately
'developer tip' 카테고리의 다른 글
슬래시가 포함 된 변수를 sed에 전달하는 방법 (0) | 2020.10.04 |
---|---|
특정 트윗에 대한 Twitter 링크 URL (0) | 2020.10.04 |
'Conda'는 내부 또는 외부 명령으로 인식되지 않습니다. (0) | 2020.10.04 |
Sourcetree에서 Git 저장소가있는 폴더의 모든 파일을 무시하려면 어떻게합니까? (0) | 2020.10.04 |
Babel 6 regeneratorRuntime이 정의되지 않았습니다. (0) | 2020.10.04 |