KILL(Transact-SQL)KILL (Transact-SQL)

적용 대상: 예SQL Server 예Azure SQL Database 예Azure Synapse Analytics(SQL DW) 예병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

세션 ID 또는 작업 단위(UOW)를 기반으로 하는 사용자 프로세스를 종료합니다.Ends a user process that is based on the session ID or unit of work (UOW). 지정한 세션 ID 또는 UOW에 실행 취소할 작업이 많은 경우 KILL 문을 완료하는 데 시간이 걸릴 수 있습니다.If the specified session ID or UOW has much work to undo, the KILL statement may take some time to complete. 특히 프로세스에서 긴 트랜잭션을 롤백하는 경우 프로세스를 완료하는 데 시간이 더 오래 걸립니다.The process takes longer to complete particularly when the process involves rolling back a long transaction.

KILL은 정상적인 연결을 종료합니다. 이 경우 내부적으로는 지정한 세션 ID와 연결된 트랜잭션이 중지됩니다.KILL ends a normal connection, which internally stops the transactions that are associated with the specified session ID. 경우에 따라 MS DTC(MicrosoftMicrosoft Distributed Transaction Coordinator)가 사용되고 있을 수 있습니다.At times, MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) might be in use. MS DTC가 사용되고 있으면 이 문을 사용하여 분리되거나 미결인 분산 트랜잭션을 종료할 수도 있습니다.If MS DTC is in use, you can also use the statement to end orphaned and in-doubt distributed transactions.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- Syntax for SQL Server  
  
KILL { session ID | UOW } [ WITH STATUSONLY ]   
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
KILL 'session_id'  
[;]   

인수Arguments

session IDsession ID
종료할 프로세스의 세션 ID입니다.Is the session ID of the process to end. _session ID_는 사용자가 연결할 때 각 연결에 할당된 고유한 정수(int)입니다.session ID is a unique integer (int) that is assigned to each user connection when the connection is made. 세션 ID 값은 연결되어 있는 동안 해당 연결에 대해 유지됩니다.The session ID value is tied to the connection for the duration of the connection. 연결이 종료되면 이 정수 값은 해제되어 새 연결에 다시 할당될 수 있습니다.When the connection ends, the integer value is released and can be reassigned to a new connection.
다음 쿼리는 중지하려는 session_id를 식별하는 데 유용할 수 있습니다.The following query can help you identify the session_id that you want to kill:

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;

UOWUOW
적용 대상: (SQL Server 2008SQL Server 2008 이상Applies to: (SQL Server 2008SQL Server 2008 and later

분산 트랜잭션의 UOW(작업 단위) ID를 식별합니다.Identifies the Unit of Work ID (UOW) of distributed transactions. _UOW_는 sys.dm_tran_locks 동적 관리 뷰의 request_owner_guid 열에서 구할 수 있는 GUID입니다.UOW is a GUID that may be obtained from the request_owner_guid column of the sys.dm_tran_locks dynamic management view. _UOW_는 오류 로그나 MS DTC 모니터를 통해 가져올 수도 있습니다.UOW also can be obtained from the error log or through the MS DTC monitor. 분산 트랜잭션 모니터링 방법은 MS DTC 설명서를 참조하세요.For more information about monitoring distributed transactions, see the MS DTC documentation.

KILL _UOW_를 사용하여 분리된 분산 트랜잭션을 종료합니다.Use KILL UOW to stop orphaned distributed transactions. 이 트랜잭션은 실제 세션 ID에 연결되어 있지 않고 대신 세션 ID='-2'에 인위적으로 연결되어 있습니다.These transactions aren't associated with any real session ID, but instead are associated artificially with session ID = '-2'. 이 세션 ID를 사용하면 sys.dm_tran_locks, sys.dm_exec_sessions 또는 sys.dm_exec_requests 동적 관리 뷰의 세션 ID 열을 쿼리하여 분리된 트랜잭션을 쉽게 식별할 수 있습니다.This session ID makes it easier to identify orphaned transactions by querying the session ID column in sys.dm_tran_locks, sys.dm_exec_sessions, or sys.dm_exec_requests dynamic management views.

WITH STATUSONLYWITH STATUSONLY
이전 KILL 문으로 인해 롤백되고 있는 지정한 session ID 또는 _UOW_에 대한 진행률 보고서를 생성합니다.Generates a progress report about a specified session ID or UOW that is being rolled back because of an earlier KILL statement. KILL WITH STATUSONLY는 session ID 또는 _UOW_를 종료하거나 롤백하지 않습니다.KILL WITH STATUSONLY doesn't end or roll back the session ID or UOW. 이 명령은 롤백의 현재 진행률만 표시합니다.The command only displays the current progress of the rollback.

RemarksRemarks

KILL은 일반적으로 잠금으로 다른 중요한 프로세스를 차단하는 프로세스를 종료하는 데 사용됩니다.KILL is commonly used to end a process that is blocking other important processes with locks. 필요한 시스템 리소스를 사용하는 쿼리를 실행하는 프로세스를 중지하는 데도 사용할 수 있습니다.KILL can also be used to stop a process that is executing a query that is using necessary system resources. 시스템 프로세스와 확장 저장 프로시저를 실행하는 프로세스는 종료될 수 없습니다.System processes and processes running an extended stored procedure can't be ended.

특히 중요한 프로세스가 실행 중일 때는 KILL을 신중하게 사용하세요.Use KILL carefully, especially when critical processes are running. 자신의 프로세스를 종료할 수는 없으며You can't kill your own process. 다음 프로세스도 종료하면 안 됩니다.You also shouldn't kill the following processes:

  • AWAITING COMMANDAWAITING COMMAND
  • CHECKPOINT SLEEPCHECKPOINT SLEEP
  • LAZY WRITERLAZY WRITER
  • LOCK MONITORLOCK MONITOR
  • SIGNAL HANDLERSIGNAL HANDLER

@@SPID를 사용하여 현재 세션에 대한 세션 ID 값을 표시할 수 있습니다.Use @@SPID to display the session ID value for the current session.

활성 세션 ID 값에 대한 보고를 가져오려면 sys.dm_tran_locks, sys.dm_exec_sessions 및 sys.dm_exec_requests 동적 관리 뷰의 session_id 열을 쿼리합니다.To obtain a report of active session ID values, query the session_id column of the sys.dm_tran_locks, sys.dm_exec_sessions, and sys.dm_exec_requests dynamic management views. sp_who 시스템 저장 프로시저에서 반환하는 SPID 열을 확인할 수도 있습니다.You can also view the SPID column that the sp_who system stored procedure returns. 특정 SPID에 대해 롤백이 진행 중인 경우 특정 SPID에 대한 sp_who 결과 집합의 cmd 열에 KILLED/ROLLBACK이 표시됩니다.If a rollback is in progress for a specific SPID, the cmd column in the sp_who result set for that SPID indicates KILLED/ROLLBACK.

특정 연결에 데이터베이스 리소스에 대한 잠금이 있으며 다른 연결의 진행률을 차단하는 경우 차단하는 연결의 세션 ID가 blocking_session_idsys.dm_exec_requests 열이나 blk에서 반환된 sp_who 열에 표시됩니다.When a particular connection has a lock on a database resource and blocks the progress of another connection, the session ID of the blocking connection shows up in the blocking_session_id column of sys.dm_exec_requests or the blk column returned by sp_who.

KILL 명령을 사용하여 미결 분산 트랜잭션을 확인할 수 있습니다.The KILL command can be used to resolve in-doubt distributed transactions. 이러한 트랜잭션은 데이터베이스 서버나 MS DTC 코디네이터의 계획되지 않은 다시 시작으로 인해 발생하는 확인되지 않은 분산 트랜잭션입니다.These transactions are unresolved distributed transactions that occur because of unplanned restarts of the database server or MS DTC coordinator. 미결 트랜잭션에 대한 자세한 내용은 표시된 트랜잭션을 사용하여 관련 데이터베이스를 일관되게 복구(전체 복구 모델)을 참조하세요.For more information about in-doubt transactions, see the "Two-Phase Commit" section in Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

WITH STATUSONLY 사용Using WITH STATUSONLY

KILL WITH STATUSONLY는 세션 ID 또는 UOW가 이전 KILL session ID|UOW 문으로 인해 롤백되는 경우 보고서를 생성합니다.KILL WITH STATUSONLY generates a report if the session ID or UOW rolls back because of a previous KILL session ID|UOW statement. 진행률 보고서는 완료된 롤백 양(백분율)과 남은 예상 시간(초)을 제공합니다.The progress report states the amount of rollback completed (in percent) and the estimated length of time left (in seconds). 보고서는 해당 내용을 다음 형식으로 표시합니다.The report states it in the following form:

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

KILL session ID|UOW WITH STATUSONLY 문이 실행되기 전에 세션 ID 또는 UOW의 롤백이 완료되면 KILL session ID|UOW WITH STATUSONLY는 다음 오류를 반환합니다.If the rollback of the session ID or UOW finishes before the KILL session ID|UOW WITH STATUSONLY statement runs, KILL session ID|UOW WITH STATUSONLY returns the following error:

"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가 없는 경우에도 이 오류가 발생합니다.This error also occurs if no session ID or UOW is being rolled back

같은 KILL session ID|UOW 문을 WITH STATUSONLY 옵션 없이 반복하면 동일한 상태 보고를 가져올 수 있습니다.The same status report can be obtained by repeating the same KILL session ID|UOW statement without using the WITH STATUSONLY option. 그러나 이 방법으로 옵션을 반복하지 않는 것이 좋습니다.However, we don't recommend repeating the option this way. KILL session ID 문을 반복하면, 새 KILL 문이 실행되기 전에 롤백이 완료되고 세션 ID가 새 작업에 다시 할당되는 경우 새 프로세스가 중지될 수 있습니다.If you repeat a KILL session ID statement, the new process might stop if the rollback finishes and the session ID is reassigned to a new task before the new KILL statement runs. WITH STATUSONLY를 지정하여 새 프로세스가 중지되지 않도록 합니다.Prevent the new process from stopping by specifying WITH STATUSONLY.

사용 권한Permissions

SQL ServerSQL Server: ALTER ANY CONNECTION 권한이 필요합니다.SQL ServerSQL Server: Requires the ALTER ANY CONNECTION permission. ALTER ANY CONNECTION은 sysadmin 또는 processadmin 고정 서버 역할의 멤버에 포함되어 있습니다.ALTER ANY CONNECTION is included with membership in the sysadmin or processadmin fixed server roles.

SQL DatabaseSQL Database: KILL DATABASE CONNECTION 권한이 필요합니다.SQL DatabaseSQL Database: Requires the KILL DATABASE CONNECTION permission. 서버 수준 보안 주체 로그인에 KILL DATABASE CONNECTION이 있습니다.The server-level principal login has the KILL DATABASE CONNECTION.

Examples

1.A. KILL을 사용하여 세션 종료Using KILL to stop a session

다음 예에서는 세션 ID 53을 종료하는 방법을 보여 줍니다.The following example shows how to stop session ID 53.

KILL 53;  
GO  

2.B. KILL 세션 ID WITH STATUSONLY를 사용하여 진행률 보고서 가져오기Using KILL session ID WITH STATUSONLY to obtain a progress report

다음 예에서는 특정 세션 ID에 대한 롤백 진행 상황을 표시합니다.The following example generates a status of the rollback process for the specific session ID.

KILL 54;  
KILL 54 WITH STATUSONLY;  
GO  
  
--This is the progress report.  
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.  

C.C. KILL을 사용하여 분리된 분산 트랜잭션 종료Using KILL to stop an orphaned distributed transaction

다음 예에서는 D5499C66-E398-45CA-BF7E-DC9C194B48CFUOW를 사용하여 분리된 분산 트랜잭션(세션 ID = -2)을 종료하는 방법을 보여 줍니다.The following example shows how to stop an orphaned distributed transaction (session ID = -2) with a UOW of D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

참고 항목See Also

KILL STATS JOB (Transact-SQL) KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION(Transact-SQL) KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
기본 제공 함수s(Transact-SQL) Built-in Functions (Transact-SQL)
SHUTDOWN (Transact-SQL) SHUTDOWN (Transact-SQL)
@@SPID&#40;Transact-SQL&#41; @@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL) sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL) sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL) sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL) sp_lock (Transact-SQL)
sp_who(Transact-SQL)sp_who (Transact-SQL)