メインコンテンツまでスキップ
バージョン: 4.x

Kill Query

現在実行中の操作をキャンセルしたり、現在の接続セッションを切断したりするには、KILLコマンドを使用できます。この文書では、関連する操作と考慮事項について説明します。

クエリ識別子の取得

KILLは対応するクエリリクエストをキャンセルするためにクエリ識別子を必要とします。クエリ識別子には、Query ID、Connection ID、およびTrace IDが含まれます。

以下の方法でクエリ識別子を取得できます。

PROCESSLIST

processlistシステムTableを通じて、現在のすべてのセッション接続と、その接続で実行されているクエリ操作を取得できます。これにはQuery IDとConnection IDが含まれます。

mysql> SHOW PROCESSLIST;
+------------------+------+------+---------------------+---------------------+----------+------+---------+------+-------+-----------------------------------+------------------+---------------+--------------+
| CurrentConnected | Id | User | Host | LoginTime | カタログ | 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のシステムTableからも確認できます:

SELECT * FROM information_schema.processlist;

デフォルトでは、processlistは追加設定を必要とせずに、すべてのFEノードからのセッション接続を表示します。

TRACE ID

この機能はバージョン2.1.11および3.0.7以降でサポートされています。

デフォルトでは、システムは各クエリに対してQuery IDを自動生成します。ユーザーはKILL操作を実行する前に、まずprocesslistシステムTableを通じてQuery IDを取得する必要があります。

さらに、ユーザーはTrace IDをカスタマイズし、そのTrace IDを使用してKILL操作を実行することも可能です。

SET session_context = "trace_id:your_trace_id";

your_trace_id はユーザー定義のTrace IDです。任意の文字列を指定できますが、; 記号を含むことはできません。

トレース IDはセッションレベルのパラメータで、現在のセッションにのみ適用されます。Dorisは現在のセッション内の後続のクエリリクエストをこのTrace IDにマッピングします。

Kill Requests

KILL ステートメントは、指定されたクエリ操作のキャンセルと、指定されたセッション接続の切断をサポートします。

通常のユーザーは、KILL 操作を通じて自分のユーザーが送信したクエリをキャンセルできます。ADMINユーザーは、自分および他のユーザーが送信したクエリをキャンセルできます。

Kill Query

構文:

KILL QUERY "query_id" | "trace_id" | connection_id;

KILL QUERYは、指定された実行中のクエリ操作をキャンセルするために使用されます。

  • "query_id"

    processlistシステムTableから取得した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システムTableから取得したConnection IDです。0より大きい整数である必要があり、クォートで囲むことはできません。例:

    KILL QUERY 55;

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

Kill Connection

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

構文:

KILL [CONNECTION] connection_id;

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

  • connection_id

    processlistシステムTableから取得されるConnection ID。0より大きい整数である必要があり、クォートで囲むことはできません。例:

    KILL CONNECTION 55;
    KILL 55;

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

ベストプラクティス

  1. カスタムTrace IDによるクエリ管理の実装

    カスタムTrace IDを使用することで、事前にクエリの一意識別子を指定でき、管理システムが[Cancel Query]機能を実装しやすくなります。以下の方法でTrace IDをカスタマイズできます:

    • 各クエリの前にsession_contextを設定

      ユーザーが独自のTrace IDを生成します。トレース 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を使用して実行中のオペレーションをいつでもキャンセルできます。