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
操作を強制終了すると、テーブルが破損して使用できなくなります。 このようなテーブルに対する読み取りまたは書き込みはすべて、そのテーブルをふたたび最適化または修復するまで失敗します (割り込みはなし)。