クエリの強制終了
KILL コマンドを使用して、現在実行中のオペレーションをキャンセルしたり、現在の接続セッションを切断したりできます。このドキュメントでは、関連するオペレーションと注意事項について説明します。
クエリ識別子の取得
KILL は対応するクエリリクエストをキャンセルするためにクエリ識別子が必要です。クエリ識別子には、Query ID、Connection ID、Trace ID があります。
以下の方法でクエリ識別子を取得できます。
PROCESSLIST
processlist システムテーブルを通じて、現在のすべてのセッション接続と接続内で実行されているクエリオペレーションを取得できます。これには Query ID と Connection ID が含まれます。
mysql> SHOW PROCESSLIST;
+------------------+------+------+---------------------+---------------------+----------+------+---------+------+-------+-----------------------------------+------------------+---------------+--------------+
| CurrentConnected | Id | User | Host | LoginTime | Catalog | Db | Command | Time | State | QueryId | Info | FE | CloudCluster |
+------------------+------+------+---------------------+---------------------+----------+------+---------+------+-------+-----------------------------------+------------------+---------------+--------------+
| No | 2 | root | 172.20.32.136:54850 | 2025-05-11 10:41:52 | internal | | Query | 6 | OK | 12ccf7f95c1c4d2c-b03fa9c652757c15 | select sleep(20) | 172.20.32.152 | NULL |
| Yes | 3 | root | 172.20.32.136:54862 | 2025-05-11 10:41:55 | internal | | Query | 0 | OK | b710ed990d4144ee-8b15bb53002b7710 | show processlist | 172.20.32.152 | NULL |
| No | 1 | root | 172.20.32.136:47964 | 2025-05-11 10:41:54 | internal | | Sleep | 11 | EOF | b60daa992bac4fe4-b29466aacce67d27 | | 172.20.32.153 | NULL |
+------------------+------+------+---------------------+---------------------+----------+------+---------+------+-------+-----------------------------------+------------------+---------------+--------------+
CurrentConnected:Yesは現在のセッションに対応する接続を示します。Id: 接続の一意識別子、つまりConnection IDです。QueryId: Queryの一意識別子です。最後に実行されたか現在実行中のSQLコマンドのQuery Idを表示します。
デフォルトでは、SHOW PROCESSLISTは現在のセッションが接続されているFEノード上のすべてのセッション接続のみを表示し、他のFEノードからのセッション接続は表示しないことに注意してください。
すべてのFEノードからのセッション接続を表示したい場合は、次のセッション変数を設定する必要があります:
SET show_all_fe_connection=true;
その後、SHOW PROCESSLISTコマンドを再度実行して、すべてのFEノードからのセッション接続を表示します。
information_schemaのシステムテーブルからも確認できます:
SELECT * FROM information_schema.processlist;
デフォルトでは、processlistは追加設定を必要とせず、すべてのFEノードからのセッション接続を表示します。
TRACE ID
この機能はバージョン2.1.11および3.0.7以降でサポートされています。
デフォルトでは、システムは各クエリに対してQuery IDを自動生成します。ユーザーはKILL操作を実行する前に、まずprocesslistシステムテーブルを通じてQuery IDを取得する必要があります。
さらに、ユーザーはTrace IDをカスタマイズし、Trace IDを使用してKILL操作を実行することもできます。
SET session_context = "trace_id:your_trace_id";
your_trace_idはユーザー定義のTrace IDです。任意の文字列を指定できますが、;記号を含めることはできません。
Trace IDはセッションレベルのパラメータであり、現在のセッションにのみ適用されます。Dorisは現在のセッション内の後続のクエリリクエストをこのTrace IDにマッピングします。
Kill Requests
KILL文は、指定されたクエリ操作のキャンセルと、指定されたセッション接続の切断をサポートします。
一般ユーザーはKILL操作により自分のユーザーが送信したクエリをキャンセルできます。ADMINユーザーは自分および他のユーザーが送信したクエリをキャンセルできます。
Kill Query
構文:
KILL QUERY "query_id" | "trace_id" | connection_id;
KILL QUERYは、指定された実行中のクエリ操作をキャンセルするために使用されます。
-
"query_id"processlistシステムテーブルを通じて取得されるQuery ID。クォートで囲む必要があります。例:KILL QUERY "d36417cc05ff41ab-9d3afe49be251055";この操作は、すべてのFEノードでQuery IDを検索し、対応するクエリをキャンセルしようとします。
-
"trace_id"session_contextを通じてカスタマイズされたTrace ID。クォートで囲む必要があります。例:KILL QUERY "your_trace_id";この操作は、すべてのFEノードでTrace IDを検索し、対応するクエリをキャンセルしようとします。
この機能はバージョン2.1.11および3.0.7以降でサポートされています。
-
connection_idprocesslistシステムテーブルを通じて取得されるConnection ID。0より大きい整数である必要があり、クォートで囲むことはできません。例:KILL QUERY 55;この操作は、現在接続されているFE上のセッション接続にのみ適用され、対応するセッション接続で現在実行されているクエリをキャンセルします。
Kill Connection
接続をkillすると、指定されたセッション接続が切断され、その接続で実行されているクエリ操作もキャンセルされます。
構文:
KILL [CONNECTION] connection_id;
CONNECTIONキーワードは省略できます。
-
connection_idprocesslistシステムテーブルから取得されるConnection ID。0より大きい整数である必要があり、引用符で囲むことはできません。例:KILL CONNECTION 55;
KILL 55;
異なるFE上の接続IDは同じである可能性がありますが、この操作は現在接続されているFE上のセッション接続のみに影響します。
Best Practices
-
カスタムTrace IDによるクエリ管理の実装
カスタムTrace IDを使用すると、クエリに対して事前に一意の識別子を指定でき、管理システムが[Cancel Query]機能を実装することが容易になります。以下の方法でTrace IDをカスタマイズできます:
-
各クエリの前に
session_contextを設定するユーザーが独自のTrace IDを生成します。Trace IDの一意性を確保するためにUUIDを使用することを推奨します。
SET session_context="trace_id:your_trace_id";
SELECT * FROM table ...;
-
-
クエリ文にTrace IDを追加する
```sql
SELECT /*+SET_VAR(session_context=trace_id:your_trace_id)*/ * FROM table ...;
```
その後、管理システムはTrace IDを使用していつでも実行中のオペレーションをキャンセルできます。