殺す
KILL
ステートメントは、現在の TiDB クラスター内の任意の TiDB インスタンスの接続を終了するために使用されます。
あらすじ
- KillStmt
KillStmt ::= 'KILL' 'TIDB'? ( 'CONNECTION' | 'QUERY' )? CONNECTION_ID
例
次の例は、現在のクラスター内のすべてのアクティブなクエリを取得し、それらのいずれかを終了する方法を示しています。
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 インスタンス内の接続を終了できます。 - 現在、MySQL コマンド ラインCtrl + Cを使用して TiDB でクエリまたは接続を終了することはサポートされていません。
行動変化の説明
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 バージョンを使用している場合は、次の点に注意してください。
- デフォルトでは、
KILL
MySQL と互換性がありません。これは、ロード バランサの背後に複数の TiDB サーバーを配置するのが一般的であるため、接続が間違った TiDBサーバーによって終了される事態を防ぐのに役立ちます。現在接続されている TiDB インスタンス上の他の接続を終了するには、KILL TIDB
ステートメントを実行して明示的にTIDB
サフィックスを追加する必要があります。
- クライアントが常に同じ TiDB インスタンスに接続されることが確実でない限り、構成ファイルで
compatible-kill-query = true
を設定することは強く推奨されません。これは、デフォルトの MySQL クライアントでCtrl + Cを押すと、KILL
が実行される新しい接続が開かれるためです。クライアントと TiDB クラスターの間にプロキシがある場合、新しい接続が別の TiDB インスタンスにルーティングされる可能性があり、これにより誤って別のセッションが強制終了される可能性があります。
KILL TIDB
ステートメントは TiDB 拡張機能です。このステートメントの機能は、MySQLKILL [CONNECTION|QUERY]
コマンドおよび MySQL コマンド ラインctrl + cに似ています。同じ TiDB インスタンスでKILL TIDB
使用しても安全です。