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
権限がある場合は、すべてのスレッドを表示できます。SUPER
権限がある場合は、すべてのスレッドとステートメントを強制終了できます。そうでない場合は、ユーザー独自のスレッドとステートメントのみを表示および強制終了できます。
mysqladmin processlist および mysqladmin kill コマンドを使用して、スレッドを検査および強制終了することもできます。
組み込みサーバーはホストアプリケーションのスレッドの内部でしか実行されないため、組み込み MySQL Server ライブラリでは KILL
を使用できません。独自の接続スレッドは作成されません。
KILL
を使用すると、そのスレッドのスレッド固有の強制終了フラグが設定されます。強制終了フラグは次の一定の間隔でしかチェックされないため、ほとんどの場合、スレッドが終了するまでにある程度時間がかかることがあります。
SELECT
操作中、ORDER BY
およびGROUP BY
ループでは、このフラグは行ブロックの読み取りのあとにチェックされます。強制終了フラグが設定されている場合、このステートメントは中止されます。ALTER TABLE
操作中、強制終了フラグは、元のテーブルから各行ブロックが読み取られる前にチェックされます。強制終了フラグが設定されていた場合、このステートメントは中止され、一時テーブルが削除されます。UPDATE
またはDELETE
操作中、強制終了フラグは、ブロックが読み取られるたび、および行が更新または削除されるたびにチェックされます。強制終了フラグが設定されている場合、このステートメントは中止されます。トランザクションを使用していない場合は、変更がロールバックされません。GET_LOCK()
は中止され、NULL
を返します。INSERT DELAYED
スレッドは、メモリー内にあるすべての行をすばやくフラッシュ (挿入) してから終了します。このスレッドがテーブルロックハンドラ内にある場合 (状態:
Locked
)、そのテーブルロックはすばやく中止されます。このスレッドが書き込みコールでディスクの空き容量を待機している場合、その書き込みは「ディスク領域不足」というエラーメッセージで中止されます。
MyISAM
テーブルに対する REPAIR TABLE
または OPTIMIZE TABLE
操作を強制終了すると、テーブルが破損して使用できなくなります。このようなテーブルに対する読み取りまたは書き込みはすべて、そのテーブルをふたたび最適化または修復するまで失敗します (割り込みはなし)。