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 コマンドを利用して、スレッドを検査、停止することもできます。
組み込みサーバーは単に、ホストアプリケーションのスレッド内で実行されているため、組み込み
MySQL サーバーライブラリで
KILL
を使用することはできません。それは、それ自身の接続スレッドは作成しません。
KILL
を利用するとき、スレッド固有のキルフラッグがスレッドに設定されます。ほとんどの場合、キルフラッグは特定のインターバルでしか確認されないので、スレッドが停止するまでに少し時間がかかります。
SELECT
,ORDER
BY
そして GROUP
BY
ループ内では、フラッグは行のブロックを読み込んだ後に確認されます。もしキルフラッグが設定されると、ステートメントは異常終了します。
ALTER TABLE
の最中に、行の各ブロックが元テーブルから読み込まれる前にキルフラッグが確認されます。もしキルフラッグが設定されると、ステートメントは異常終了し、一時テーブルは削除されます。
UPDATE
や
DELETE
操作の最中に、各ブロックの読み込みや、行の各更新や削除のあとでキルフラッグが確認されます。もしキルフラッグが設定されると、ステートメントは異常終了します。もしトランザクションを利用していなければ、変更はロールバックされないことに注意してください。
GET_LOCK()
は NULL
を異常終了し、返します。
INSERT
DELAYED
スレッドはメモリー内に持っているすべての行をすばやくフラッシュ
(挿入) します。
もしスレッドがテーブルロックハンドラ内にあれば、(状態:
Locked
)
テーブルロックは迅速に異常終了します。
もしスレッドが書き込みコール内でフリーディスクスペースを待っていたら、その書き込みは 「disk full」 エラーメッセージを利用して異常終了されます。
MyISAM
テーブル上で
REPAIR
TABLE
または
OPTIMIZE
TABLE
操作を強制終了すると、テーブルが破損して使用できなくなります。それを最適化、または修復するまで
(割り込みなしで)、そのようなテーブルへの書き込みや読み込みは失敗します。