programing

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

skycolor 2023. 5. 12. 21:58
반응형

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

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

그 이유는 무엇일 수 있으며 어떻게 하면 즉시 중단할 수 있습니까?

sp_who2 'active'

CPU 시간 및 디스크 아래의 값 확인IO. 비교적 큰 값을 갖는 공정의 SPID를 기록합니다.

kill {SPID value}

그 이유가 무엇일까요?

주의가 서버에 도달하여 처리될 수 있는 경우 쿼리를 즉시 취소합니다.쿼리는 취소 가능한 상태여야 합니다. SQLCLR에서 웹 서비스 호출과 같은 특정 작업을 수행하는 경우를 제외하고는 거의 항상 해당됩니다.주의가 서버에 도달할 수 없는 경우 일반적으로 스케줄러 오버로드로 인해 발생합니다.

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

귀하의 사건에 적용되는 구체적인 이유에 대해 답변하려면 귀하 자신을 조사해야 합니다.

먼저 다음 명령을 실행합니다.

sp_who2

그런 다음 위의 명령에서 얻은 SPID로 다음 명령을 실행합니다.

KILL {SPID value}

이것은 다소 어리석은 대답이지만, 적어도 제 경우에는 안정적으로 작동합니다.관리 스튜디오에서 "쿼리 실행 취소"가 쿼리를 중지하지 않을 때 현재 SQL 문서를 닫으려면 클릭합니다.쿼리를 취소할지 묻는 메시지가 나타납니다. "예"라고 대답하고 몇 초 후 실행이 중지됩니다.그런 다음 닫기 전에 문서를 저장할지 묻는 메시지가 나타납니다.이 때 [취소]를 눌러 문서를 연 상태로 유지하고 작업을 계속할 수 있습니다.배후에서 무슨 일이 벌어지고 있는지는 모르겠지만, 효과가 있는 것 같습니다.

취소하고 해당 실행을 확인하는 경우

 sp_who2 'active'

(이전 sql server 2000 FYI에서는 Activity Monitor를 사용할 수 없습니다.)

죽이려는 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.
  1. 먼저 아래 쿼리를 사용하여 실행 중인 모든 쿼리를 표시/확인해야 합니다.

    SELECT text, GETDATE(), *
    FROM sys.dm_exec_requests
    CROSS APPLY sys.dm_exec_sql_text(sql_handle)
    
  2. » Session-Id그리고.Description실행 중인 모든 쿼리에 대해 즉시 종료/중지할 특정 쿼리의 Session-Id를 복사합니다.

  3. 다음 쿼리를 사용하여 Session-Id를 사용하여 특정 쿼리를 종료/중지합니다.

    Kill Session-id
    

    예:

    kill 125 --125 is my Session-Id
    

바로 가기 키 +를 사용하여 쿼리 실행을 중지할 수 있습니다.그러나 모든 경우에 성공하지 못할 수도 있습니다.

저는 오래 전부터 같은 일을 겪고 있습니다.특히 원격 서버에 연결되어 있거나(속도가 느릴 수 있음) 네트워크 연결이 좋지 않은 경우에 발생합니다.저는 마이크로소프트가 올바른 답이 무엇인지 알고 있는지 의심스럽습니다.

하지만 제가 해결책을 찾으려고 노력한 이후로 말입니다.1개의 일반인 접근법만 작동했습니다.

  • 문제가 발생한 쿼리 탭 위의 닫기 버튼을 클릭합니다.잠시 후 (마이크로소프트가 당신에게 가혹하지 않다면!!!)이것을 묻는 창이 나타날 수 있습니다.

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

  • 예를 클릭합니다.

  • 잠시 후 이 쿼리를 저장할지 여부를 묻는 메시지가 표시됩니다.

  • "취소" 클릭

그리고 그것을 게시하세요, 당신의 스튜디오가 당신의 질의를 실행하기 위해 다시 안정적일 수 있습니다.

백그라운드에서 수행되는 작업은 쿼리 창과 연결의 연결을 끊는 것입니다.따라서 쿼리를 다시 실행하려면 원격 서버를 다시 연결하는 데 시간이 걸립니다.하지만 이 교환이 영원한 타이머를 보는 것보다 훨씬 낫다는 것을 믿어주세요.

PS: 이것은 저에게도 효과가 있습니다. 쿠도스님도 마찬가지입니다.!!!

분명히 sql server 2008 r264bit에서 IIS에서 장시간 실행되는 쿼리로 killspid가 작동하지 않는 것 같습니다. 쿼리는 계속해서 다시 시작됩니다.거미의 것을 재사용하는 것 같습니다.쿼리로 인해 sql server는 35%의 CPU를 지속적으로 사용하여 웹 사이트를 참조하십시오.bc/ 로그인을 위한 다른 쿼리에 응답할 수 없는 것 같습니다.

빨간색 "중지" 상자가 작동하지 않는 경우 키보드의 "Ctrl + 중단" 단추를 눌러 보십시오.

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

제가 쉴 새 없이 실행하는 동안 SQL을 닫으려 할 때 SQL이 끊어졌습니다.그래서 제가 한 일은 작업 관리자를 열고 작업을 종료하는 것입니다.이렇게 하면 SQL이 중지되고 다시 시작됩니다.

VSCode mssql 확장을 사용하는 경우 F1을 클릭하고 프롬프트에 mssql을 입력한 다음 확장에 대한 이 스레드에 나와 있는 처럼 '쿼리 취소'를 선택합니다.

내 스튜디오 버전:Microsoft SQL Server Management Studio 18

컴퓨터 네트워크 카드를 수동으로 닫았고, 무한 루프 쿼리가 성공적으로 종료되었습니다!

언급URL : https://stackoverflow.com/questions/15921458/how-to-kill-stop-a-long-sql-query-immediately

반응형