KILL (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス
セッション ID または作業単位 (UOW) に基づいてユーザーのプロセスを終了します。 指定されたセッション ID または UOW に元に戻す作業が多い場合、ステートメントの KILL
完了に時間がかかる場合があります。 特に、プロセスに長いトランザクションのロールバックが含まれている場合、このプロセスは完了するまで時間がかかります。
KILL
は通常の接続を終了します。これは、指定されたセッション ID に関連付けられているトランザクションを内部的に停止します。 Microsoft 分散トランザクション コーディネーター (MS DTC) が使用されることがあります。 MS DTC が使用されている場合も、このステートメントを使用して、孤立している分散トランザクションと疑いのある分散トランザクションを終了できます。
構文
SQL Server、Azure SQL Database、および Azure SQL Managed Instance の構文:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Azure Synapse Analytics、Analytics Platform System (PDW)、Microsoft Fabric の場合の構文:
KILL 'session_id'
[ ; ]
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
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
分散トランザクションの作業単位 ID (UOW) を識別します。 UOW は、動的管理ビューのrequest_owner_guid
sys.dm_tran_locks
列から取得できる GUID です。 UOW は、エラー ログや MS DTC モニターからも取得できます。 分散トランザクションの監視の詳細については、MS DTC のドキュメントを参照してください。
未解決の分散トランザクションを停止するために使用 KILL <UOW>
します。 これらのトランザクションは実際のセッション ID には関連付けられませんが、代わりにセッション ID = -2
に人為的に関連付けられます。 このセッション ID を使用すると、セッション ID 列 (動的管理ビュー) sys.dm_exec_requests
に対してクエリを実行することで、未解決のトランザクションを簡単にsys.dm_tran_locks
sys.dm_exec_sessions
識別できます。
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_tran_locks
sys.dm_exec_sessions
列に対してsys.dm_exec_requests
クエリを実行session_id
します。 システム ストアド プロシージャが SPID
返す sp_who
列を表示することもできます。 特定の SPID に対してロールバックが進行中の場合、cmd
その SPID KILLED/ROLLBACK
の結果セット内sp_who
の列は .
特定の接続がデータベース リソースをロックして別の接続の進行を妨げている場合、sys.dm_exec_requests
の blocking_session_id
列、または sp_who
が返す blk
列に、ブロックしている接続のセッション ID が示されます。
この 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
ステートメントが実行される前にセッション ID または UOW のロールバックがKILL <session ID> WITH STATUSONLY
完了すると、KILL ... 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 がロールバックされていない場合にも発生します。
オプションを使用せずに同じステートメントを繰り返すことで、同じ KILL
状態レポートを WITH STATUSONLY
取得できます。 ただし、このオプションをこの方法で繰り返すことはお勧めしません。 ステートメントを 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';
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示