Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

13.7.8.4 KILL ステートメント

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