メインコンテンツまでスキップ

クエリの強制終了

現在実行中の操作をキャンセルしたり、現在の接続セッションを切断したりするには、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_id

    processlistシステムテーブルを通じて取得したConnection ID。0より大きい整数である必要があり、引用符で囲むことはできません。例:

    KILL QUERY 55;

    この操作は、現在接続されているFE上のセッション接続にのみ適用され、対応するセッション接続で現在実行されているクエリをキャンセルします。

Kill Connection

接続をkillすると、指定されたセッション接続が切断され、その接続で実行されているクエリ操作もキャンセルされます。

構文:

KILL [CONNECTION] connection_id;

CONNECTIONキーワードは省略できます。

  • connection_id

    processlistシステムテーブルから取得したConnection ID。0より大きい整数である必要があり、引用符で囲むことはできません。例:

    KILL CONNECTION 55;
    KILL 55;

異なるFE上のConnection IDは同じである可能性がありますが、この操作は現在接続されているFE上のセッション接続にのみ影響します。

ベストプラクティス

  1. カスタム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を使用して実行中のオペレーションをいつでもキャンセルできます。