다음을 통해 공유


KILL(Transact-SQL)

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스

세션 ID 또는 작업 단위(UOW)를 기반으로 하는 사용자 프로세스를 종료합니다. 지정된 세션 ID 또는 UOW에서 실행 취소 KILL 할 작업이 많은 경우 문을 완료하는 데 다소 시간이 걸릴 수 있습니다. 특히 프로세스에서 긴 트랜잭션을 롤백하는 경우 프로세스를 완료하는 데 시간이 더 오래 걸립니다.

KILL 는 지정된 세션 ID와 연결된 트랜잭션을 내부적으로 중지하는 일반 연결을 종료합니다. 경우에 따라 MS DTC(Microsoft Distributed Transaction Coordinator)가 사용되고 있을 수 있습니다. MS DTC가 사용되고 있으면 이 문을 사용하여 분리되거나 미결인 분산 트랜잭션을 종료할 수도 있습니다.

Transact-SQL 구문 표기 규칙

구문

SQL Server, Azure SQL Database 및 Azure SQL Managed Instance용 구문:

KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]

Azure Synapse Analytics, PDW(Analytics Platform System) 및 Microsoft Fabric에 대한 구문:

KILL 'session_id'
[ ; ]

인수

session_id

종료할 프로세스의 세션 ID입니다. session_id 는 연결이 만들어지면 각 사용자 연결에 할당되는 고유한 int 입니다. 세션 ID 값은 연결되어 있는 동안 해당 연결에 대해 유지됩니다. 연결이 종료되면 이 정수 값은 해제되어 새 연결에 다시 할당될 수 있습니다.

다음 쿼리는 중지하려는 session_id를 식별하는 데 유용할 수 있습니다.

 SELECT conn.session_id, host_name, program_name,
     nt_domain, login_name, connect_time, last_request_end_time
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
    ON sess.session_id = conn.session_id;

UOW

분산 트랜잭션의 UOW(작업 ID) 단위를 식별합니다. UOW 는 동적 관리 뷰의 열에서 request_owner_guid 가져올 수 있는 sys.dm_tran_locks GUID입니다. UOW는 오류 로그나 MS DTC 모니터를 통해 가져올 수도 있습니다. 분산 트랜잭션 모니터링 방법은 MS DTC 설명서를 참조하세요.

해결되지 않은 분산 트랜잭션을 중지하는 데 사용합니다 KILL <UOW> . 이러한 트랜잭션은 실제 세션 ID와 연결되지 않고 세션 ID = -2와 인위적으로 연결됩니다. 이 세션 ID를 사용하면 또는 동적 관리 뷰에서 sys.dm_tran_lockssys.dm_exec_sessionssys.dm_exec_requests 세션 ID 열을 쿼리하여 해결되지 않은 트랜잭션을 보다 쉽게 식별할 수 있습니다.

WITH STATUSONLY

지정된 UOW 에 대한 진행률 보고서를 생성하는 데 사용되거나 session_id 이전 KILL 문으로 인해 롤백되고 있습니다. KILL WITH STATUSONLY 은 UOW 또는 세션 ID를 종료하거나 롤백하지 않습니다. 이 명령은 롤백의 현재 진행률만 표시합니다.

WITH COMMIT

커밋을 사용하여 해결되지 않은 분산 트랜잭션을 종료하는 데 사용됩니다. 분산 트랜잭션에만 적용됩니다. 이 옵션을 사용하려면 UOW를 지정해야 합니다. 자세한 내용은 분산 트랜잭션을 참조 하세요.

WITH ROLLBACK

롤백을 사용하여 해결되지 않은 분산 트랜잭션을 종료하는 데 사용됩니다. 분산 트랜잭션에만 적용됩니다. 이 옵션을 사용하려면 UOW를 지정해야 합니다. 자세한 내용은 분산 트랜잭션을 참조 하세요.

설명

KILL 는 잠금으로 다른 중요한 프로세스를 차단하는 프로세스를 종료하는 데 일반적으로 사용됩니다. KILL 은 필요한 시스템 리소스를 사용하는 쿼리를 실행하는 프로세스를 중지하는 데 사용할 수도 있습니다. 시스템 프로세스와 확장 저장 프로시저를 실행하는 프로세스는 종료될 수 없습니다.

특히 중요한 프로세스가 실행되는 경우 신중하게 사용합니다 KILL . 자신의 프로세스를 종료할 수는 없으며 다음 프로세스도 종료하면 안 됩니다.

  • AWAITING COMMAND
  • CHECKPOINT SLEEP
  • LAZY WRITER
  • LOCK MONITOR
  • SIGNAL HANDLER

현재 세션의 세션 ID 값을 표시하는 데 사용합니다 @@SPID .

활성 세션 ID 값의 보고서를 가져오려면 , sys.dm_exec_sessionssys.dm_exec_requests 동적 관리 뷰의 sys.dm_tran_locks열을 쿼리 session_id 합니다. 시스템 저장 프로시저가 SPID 반환하는 sp_who 열을 볼 수도 있습니다. 특정 SPID에 대한 롤백이 진행 중인 경우 해당 SPID cmd 에 대한 결과 집합의 sp_who 열이 표시됩니다 KILLED/ROLLBACK.

특정 연결에 데이터베이스 리소스에 대한 잠금이 있으며 다른 연결의 진행률을 차단하는 경우 차단하는 연결의 세션 ID가 blocking_session_idsys.dm_exec_requests 열이나 blk에서 반환된 sp_who 열에 표시됩니다.

KILL 명령은 의심할 여지 없는 분산 트랜잭션을 해결하는 데 사용할 수 있습니다. 이러한 트랜잭션은 데이터베이스 서버나 MS DTC 코디네이터의 계획되지 않은 다시 시작으로 인해 발생하는 확인되지 않은 분산 트랜잭션입니다. 의심스러운 트랜잭션에 대한 자세한 내용은 표시된 트랜잭션을 사용하여 관련 데이터베이스를 일관되게 복구하는 "2단계 커밋" 섹션 을 참조하세요.

WITH STATUSONLY 사용

KILL WITH STATUSONLY 는 이전 KILL <session ID> 또는 KILL <UOW> 문으로 인해 세션 ID 또는 UOW가 롤백되는 경우 보고서를 생성합니다. 진행률 보고서는 완료된 롤백 양(백분율)과 남은 예상 시간(초)을 제공합니다. 보고서는 해당 내용을 다음 형식으로 표시합니다.

Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

또는 KILL <UOW> WITH STATUSONLY 문이 실행 KILL ... WITH STATUSONLY 되기 전에 세션 ID 또는 UOW의 롤백이 KILL <session ID> WITH STATUSONLY 완료되면 다음 오류가 반환됩니다.

"Msg 6120, Level 16, State 1, Line 1"
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

이 오류는 세션 ID 또는 UOW가 롤백되지 않는 경우에도 발생합니다.

옵션을 사용하지 WITH STATUSONLY 않고 동일한 문을 반복하여 동일한 KILL 상태 보고서를 가져올 수 있습니다. 그러나 이 방법으로 옵션을 반복하지 않는 것이 좋습니다. 문을 반복 KILL <session_id> 하면 롤백이 완료되고 새 문이 실행되기 전에 세션 ID가 새 작업에 다시 할당되면 새 KILL 프로세스가 중지될 수 있습니다. 를 지정하여 새 프로세스가 중지되지 않도록 합니다 WITH STATUSONLY.

사용 권한

SQL Server: 권한이 필요합니다 ALTER ANY CONNECTION . ALTER ANY CONNECTION는 sysadmin 또는 processadmin 고정 서버 역할의 멤버 자격에 포함됩니다.

SQL Database: 권한이 필요합니다 KILL DATABASE CONNECTION . 서버 수준 보안 주체 로그인에는 권한이 있습니다 KILL DATABASE CONNECTION .

Microsoft Fabric: 관리자 권한이 필요합니다.

Azure Synapse Analytics: 관리자 권한이 필요합니다.

예제

A. KILL을 사용하여 세션 중지

다음 예에서는 세션 ID 53을 종료하는 방법을 보여 줍니다.

KILL 53;
GO

B. KILL 세션 ID WITH STATUSONLY를 사용하여 진행률 보고서 가져오기

다음 예에서는 특정 세션 ID에 대한 롤백 진행 상황을 표시합니다.

KILL 54;
KILL 54 WITH STATUSONLY;
GO

결과 집합은 다음과 같습니다.

spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. KILL을 사용하여 분리된 분산 트랜잭션 중지

다음 예제에서는 UOW D5499C66-E398-45CA-BF7E-DC9C194B48CF 를 사용하여 분리된 분산 트랜잭션(세션 ID = -2)을 중지하는 방법을 보여 줍니다.

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';