殺す
KILL文は、現在の TiDB クラスタ内の任意の TiDB インスタンスへの接続を終了するために使用されます。TiDB v6.2.0 以降では、 KILL文を使用して実行中の DDL ジョブを終了することもできます。
概要
- KillStmt
KillStmt ::= 'KILL' 'TIDB'? ( 'CONNECTION' | 'QUERY' )? CONNECTION_ID
例
次の例は、現在のクラスター内のすべてのアクティブなクエリを取得し、そのうちの 1 つを終了する方法を示しています。
SELECT ID, USER, INSTANCE, INFO FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST;
+---------------------+------+-----------------+-----------------------------------------------------------------------------+
| ID | USER | INSTANCE | INFO |
+---------------------+------+-----------------+-----------------------------------------------------------------------------+
| 8306449708033769879 | root | 127.0.0.1:10082 | select sleep(30), 'foo' |
| 5857102839209263511 | root | 127.0.0.1:10080 | select sleep(50) |
| 5857102839209263513 | root | 127.0.0.1:10080 | SELECT ID, USER, INSTANCE, INFO FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST |
+---------------------+------+-----------------+-----------------------------------------------------------------------------+
KILL 5857102839209263511;
Query OK, 0 rows affected (0.00 sec)
MySQLの互換性
- MySQL の
KILL文は現在接続されている MySQL インスタンス内の接続のみを終了できますが、TiDB のKILL文はクラスター全体の任意の TiDB インスタンス内の接続を終了できます。 - v7.2.0 以前のバージョンでは、MySQL コマンドラインのControl+Cを使用して TiDB 内のクエリまたは接続を終了することはサポートされていません。
行動変化の説明
v7.3.0以降、TiDBは32ビット接続IDの生成をサポートしています。これはデフォルトで有効になっており、 enable-32bits-connection-id設定項目で制御されます。Global Kill機能と32ビット接続IDの両方を有効にすると、TiDBは32ビット接続IDを生成し、MySQLコマンドラインでControl+Cを使用してクエリまたは接続を終了できます。
v6.1.0 以降、TiDB は Global Kill 機能をサポートしています。この機能はデフォルトで有効になっており、 enable-global-kill構成によって制御されます。
Global Kill機能を有効にすると、 KILLとKILL TIDB両方のステートメントでインスタンス間のクエリまたは接続を終了できるため、クエリや接続が誤って終了してしまう心配はありません。クライアントを使用して任意のTiDBインスタンスに接続し、 KILLまたはKILL TIDBステートメントを実行すると、ステートメントは対象のTiDBインスタンスに転送されます。クライアントとTiDBクラスタの間にプロキシが存在する場合、 KILLとKILL TIDBステートメントも対象のTiDBインスタンスに転送され、実行されます。
Global Kill 機能が有効になっていない場合、または v6.1.0 より前のバージョンの TiDB を使用している場合は、次の点に注意してください。
- デフォルトでは、
KILLMySQL と互換性がありません。これは、ロードバランサーの背後に複数の TiDB サーバーを配置することが一般的であるため、誤った TiDBサーバーによって接続が切断される事態を防ぐのに役立ちます。現在接続中の TiDB インスタンス上の他の接続を切断するには、KILL TIDBステートメントを実行して明示的にTIDBサフィックスを追加する必要があります。
- クライアントが常に同じTiDBインスタンスに接続されることが確実でない限り、設定ファイルで
compatible-kill-query = true設定することは強く推奨されません。これは、デフォルトのMySQLクライアントでControl+Cを押すと、新しい接続が開かれ、その中でKILL実行されるためです。クライアントとTiDBクラスタの間にプロキシが存在する場合、新しい接続が別のTiDBインスタンスにルーティングされ、誤って別のセッションが強制終了される可能性があります。
KILL TIDB文はTiDBの拡張機能です。この文の機能は、MySQLKILL [CONNECTION|QUERY]コマンドおよびMySQLコマンドラインのControl+Cに似ています。同じTiDBインスタンスでKILL TIDB安全に使用できます。