このページは機械翻訳したものです。
KILL [CONNECTION | QUERY] processlist_id
mysqld への各接続は、個別のスレッドで実行されます。 スレッドは、KILL ステートメントで強制終了できます。
processlist_id
スレッドプロセッスリスト識別子は、INFORMATION_SCHEMA PROCESSLIST テーブルの ID カラム、SHOW PROCESSLIST 出力の Id カラム、およびパフォーマンススキーマ threads テーブルの PROCESSLIST_ID カラムから決定できます。 現在のスレッドの値は、CONNECTION_ID() 関数によって返されます。
KILL では、オプションの CONNECTION または QUERY 修飾子が許可されます。
KILL CONNECTIONは修飾子のないKILLと同じです: 接続が実行されているステートメントを終了すると、指定されたprocesslist_idに関連付けられている接続が終了します。KILL QUERYは、接続が現在実行されているステートメントを終了しますが、接続自体はそのままになります。
強制終了できるスレッドを表示できるかどうかは、PROCESS 権限によって異なります:
PROCESSがない場合は、自分のスレッドのみを表示できます。PROCESSでは、すべてのスレッドを表示できます。
スレッドおよびステートメントを強制終了できるかどうかは、CONNECTION_ADMIN 権限および非推奨の SUPER 権限によって異なります:
CONNECTION_ADMINまたはSUPERがない場合は、独自のスレッドおよびステートメントのみを強制終了できます。CONNECTION_ADMINまたはSUPERを使用すると、SYSTEM_USER権限で実行されているスレッドまたはステートメントに影響を与える場合を除き、すべてのスレッドおよびステートメントを強制終了できます。独自のセッションには、SYSTEM_USER権限も必要です。
mysqladmin processlist および mysqladmin kill コマンドを使用して、スレッドを検査および強制終了することもできます。
KILL を使用すると、そのスレッドのスレッド固有の強制終了フラグが設定されます。 強制終了フラグは次の一定の間隔でしかチェックされないため、ほとんどの場合、スレッドが終了するまでにある程度時間がかかることがあります。
SELECT操作中、ORDER BYおよびGROUP BYループでは、このフラグは行ブロックの読み取りのあとにチェックされます。 強制終了フラグが設定されている場合、このステートメントは中止されます。-
テーブルのコピーを作成する
ALTER TABLE操作では、元のテーブルから読み取られたいくつかのコピーされた行について、強制終了フラグが定期的にチェックされます。 強制終了フラグが設定されていた場合、このステートメントは中止され、一時テーブルが削除されます。KILLステートメントは確認を待機せずに戻りますが、強制終了フラグチェックにより、妥当な時間内に操作が中断されます。 必要なクリーンアップを実行する操作を中止するには、時間もかかります。 UPDATEまたはDELETE操作中、強制終了フラグは、ブロックが読み取られるたび、および行が更新または削除されるたびにチェックされます。 強制終了フラグが設定されている場合、このステートメントは中止されます。 トランザクションを使用していない場合、変更はロールバックされません。GET_LOCK()は中止され、NULLを返します。このスレッドがテーブルロックハンドラ内にある場合 (状態:
Locked)、そのテーブルロックはすばやく中止されます。このスレッドが書き込みコールでディスクの空き容量を待機している場合、その書き込みは「ディスク領域不足」というエラーメッセージで中止されます。
EXPLAIN ANALYZEは異常終了し、出力の最初の行を出力します。 これは、MySQL 8.0.20 以降で機能します。
MyISAM テーブルに対する REPAIR TABLE または OPTIMIZE TABLE 操作を強制終了すると、テーブルが破損して使用できなくなります。 このようなテーブルに対する読み取りまたは書き込みはすべて、そのテーブルをふたたび最適化または修復するまで失敗します (割り込みはなし)。