KILL [CONNECTION | QUERY] thread_id
mysqld
への各接続は別々のスレッド内で起動します。どのスレッドが
SHOW PROCESSLIST
ステートメントを利用し、スレッドを停止させるのかを、KILL
ステートメントを利用して確認する事ができます。
thread_id
KILL
は任意の
CONNECTION
か QUERY
修飾子を許容します。
KILL CONNECTION
は修飾子を持たない KILL
と同じです。それは
thread_id
と関連している接続を終了します。
KILL QUERY
は現在接続が実行中であるステートメントを終了させますが、その接続自体には手をつけずそのまま残しておきます。
もし PROCESS
権限を持っていれば、全てのスレッドを見る事ができます。もし
SUPER
権限を持っていれば、全てのスレッドとステートメントを停止する事ができます。そうでなければ、自分自身のスレッドとステートメントのみ確認、停止させる事ができます。
mysqladmin processlist と mysqladmin kill コマンドを利用して、スレッドを検査、停止する事もできます。
注意:埋め込みサーバは、ホスト
アプリケーションのスレッド内ではほとんど起動しないので、KILL
と埋め込み MySQL サーバ
ライブラリを一緒に利用する事はできません。それは、それ自身の接続スレッドは作成しません。
KILL
を利用する時、スレッド固有のキル
フラッグがスレッドに設定されます。ほとんどの場合、キル
フラッグは特定のインターバルでしか確認されないので、スレッドが停止するまでに少し時間がかかります。
SELECT
,ORDER BY
そして GROUP BY
ループ内では、フラッグは行のブロックを読み込んだ後に確認されます。もしキル
フラッグが設定されると、ステートメントは異常終了します。
ALTER TABLE
の最中に、行の各ブロックが元テーブルから読み込まれる前にキル
フラッグが確認されます。もしキル
フラッグが設定されると、ステートメントは異常終了し、テンポラリ
テーブルは削除されます。
UPDATE
や DELETE
操作の最中に、各ブロックの読み込みや、行の各更新や削除の後でキル
フラッグが確認されます。もしキル
フラッグが設定されると、ステートメントは異常終了します。もしトランザクションを利用していなければ、変更はロールバックされない事に注意してください。
GET_LOCK()
は NULL
を異常終了し、返します。
INSERT DELAYED
スレッドはメモリ内に持っている全ての行をすばやくフラッシュ(挿入)します。
もしスレッドがテーブル ロック
ハンドラ内にあれば、(状態:
Locked
)
テーブルロックは迅速に異常終了します。
もしスレッドが書き込みコール内でフリー ディスク スペースを待っていたら、その書き込みは 「disk full」 エラー メッセージを利用して異常終了されます。
警告:
MyISAM
テーブル上で
REPAIR TABLE
や OPTIMIZE
TABLE
操作を終了させると、テーブルが破損され、利用不可能になります。それを最適化、または修復するまで(割り込み無しで)、そのようなテーブルへの書き込みや読み込みは失敗します。