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

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

セッション ID または作業単位 (UOW) に基づき、ユーザーのプロセスを終了します。Terminates 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, particularly when it involves rolling back a long transaction.

KILL を使用して通常の接続を終了することにより、指定したセッション ID に関連付けられたトランザクションを内部的に終了できます。KILL can be used to terminate a normal connection, which internally terminates the transactions that are associated with the specified session ID. MicrosoftMicrosoft 分散トランザクション コーディネーター (MS DTC) を使用している場合は、このステートメントを使用して、状態が不明な孤立したトランザクションをすべて終了することもできます。The statement can also be used to terminate orphaned and in-doubt distributed transactions when MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) is in use.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions


-- Syntax for SQL Server  

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

KILL 'session_id'  


セッション IDsession ID
終了するプロセスのセッション ID です。Is the session ID of the process to terminate. セッション 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;

適用対象: ( SQL Server 2008:SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: ( SQL Server 2008:SQL Server 2008 through SQL Server 2017SQL Server 2017

分散トランザクションの作業単位 ID (UOW) を指定します。Identifies the Unit of Work ID (UOW) of distributed transactions. UOW は、sys.dm_tran_locks 動的管理ビューの request_owner_guid column から取得できる 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 terminate orphaned distributed transactions. これらのトランザクションは、実際のどのセッション ID にも関連付けられていませんが、見かけ上のセッション ID = '-2' に関連付けられています。These transactions are not associated with any real session ID, but instead are associated artificially with session ID = '-2'. sys.dm_tran_locks、sys.dm_exec_sessions、または sys.dm_exec_requests のいずれかの動的管理ビューのセッション ID 列を照会すれば、孤立したトランザクションをこのセッション 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.

以前の KILL ステートメントに従ってロールバックされている、指定したセッション ID または UOW についての進行状況レポートを生成します。Generates a progress report about a specified session ID or UOW that is being rolled back due to an earlier KILL statement. KILL WITH STATUSONLY は、セッション IDUOW を終了またはロールバックしません。ロールバックの現在の進行状況を表示するだけです。KILL WITH STATUSONLY does not terminate or roll back the session ID or UOW; the command only displays the current progress of the rollback.


通常 KILL は、他の重要なプロセスをロックしているプロセスを終了するときに使用されます。また、クエリが重要なシステム リソースを使用しており、プロセスがこのようなクエリを実行している場合、そのプロセスを終了するときにも使用されます。KILL is commonly used to terminate a process that is blocking other important processes with locks, or a process that is executing a query that is using necessary system resources. システム プロセスと拡張ストアド プロシージャを実行しているプロセスは終了できません。System processes and processes running an extended stored procedure cannot be terminated.

重要なプロセスが実行している場合は特に、KILL の使用には注意してください。Use KILL carefully, especially when critical processes are running. ユーザー自身のプロセスは終了できません。You cannot kill your own process. また、次のプロセスも終了できません。Other processes you should not kill include the following:


現在のセッションのセッション ID 値を表示するには、@@SPID を使用します。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, you can 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 is returned by the sp_who system stored procedure. 特定の 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.

特定の接続がデータベース リソースをロックして別の接続の進行を妨げている場合、sys.dm_exec_requestsblocking_session_id 列、または sp_who が返す blk 列に、ブロックしている接続のセッション ID が示されます。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. 未確定トランザクションの詳細については、「マークされたトランザクションを使用して関連するデータベースを一貫した状態に復元する方法 (完全復旧モデル)」の「2 フェーズ コミット」を参照してください。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).


KILL WITH STATUSONLY は、以前の KILL session ID|UOW ステートメントに従ってセッション ID または UOW が現在ロールバックされている場合にのみ、レポートを生成します。KILL WITH STATUSONLY generates a report only if the session ID or UOW is currently being rolled 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), 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 のロールバックが完了している場合、あるいはロールバックするセッション ID または UOW が存在しない場合、KILL session ID|UOW WITH STATUSONLY は次のエラー メッセージを返します。If the rollback of the session ID or UOW has finished when the KILL session ID|UOW WITH STATUSONLY statement is executed, or if no session ID or UOW is being rolled back, 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."

WITH STATUSONLY オプションを設定しない状態で同じ KILL ID|UOW ステートメントを繰り返すことによって、同じ状態レポートを取得できますが、このような操作は、お勧めできません。The same status report can be obtained by repeating the same KILL session ID|UOW statement without using the WITH STATUSONLY option; however, we do not recommend doing this. ロールバックが完了しており、新しい KILL ステートメントが実行される前にセッション ID が新しいタスクに再度割り当てられた場合、KILL ID ステートメントの繰り返しによって、新しいプロセスが終了する可能性があります。Repeating a KILL session ID statement might terminate a new process if the rollback had finished and the session ID was reassigned to a new task before the new KILL statement is run. WITH STATUSONLY を指定すると、このような状況が発生しなくなります。Specifying WITH STATUSONLY prevents this from happening.


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 データベースSQL Database: KILL DATABASE CONNECTION 権限が必要です。 SQL データベースSQL Database: Requires the KILL DATABASE CONNECTION permission. サーバー レベル プリンシパル ログインが、KILL DATABASE CONNECTION です。The server-level principal login has the KILL DATABASE CONNECTION.


A.A. KILL を使用してセッションを終了するUsing KILL to terminate a session

次の例では、セッション ID が 53 のプロセスを終了します。The following example shows how to terminate session ID 53.

KILL 53;  

B.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;  

--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 terminate an orphaned distributed transaction

次の例では、D5499C66-E398-45CA-BF7E-DC9C194B48CFUOW で、孤立した分散トランザクション (セッション ID = -2) を終了する例を示します。The following example shows how to terminate an orphaned distributed transaction (session ID = -2) with a UOW of D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

参照See Also

組み込み関数 (Transact-SQL) Built-in Functions (Transact-SQL)
@@SPID (Transact-SQL) @@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)