ClickHouse/docs/ja/sql-reference/statements/kill.md
2024-11-18 11:58:58 +09:00

5.6 KiB
Raw Blame History

slug sidebar_position sidebar_label title
/ja/sql-reference/statements/kill 46 KILL KILLステートメント

KILLステートメントには2種類あります: クエリを停止するものと、ミューテーションを停止するものです。

KILL QUERY

KILL QUERY [ON CLUSTER cluster]
  WHERE <system.processesテーブルからSELECTするための条件式>
  [SYNC|ASYNC|TEST]
  [FORMAT format]

現在実行中のクエリを強制的に停止しようとします。停止するクエリは、KILLクエリのWHERE句で定義された条件に基づき、system.processesテーブルから選択されます。

例:

まず、未完了のクエリのリストを取得する必要があります。このSQLクエリは、最も長く実行されているものに基づき、これを提供します。

単一のClickHouseードからのリスト:

SELECT
  initial_query_id,
  query_id,
  formatReadableTimeDelta(elapsed) AS time_delta,
  query,
  *
  FROM system.processes
  WHERE query ILIKE 'SELECT%'
  ORDER BY time_delta DESC;

ClickHouseクラスタからのリスト:

SELECT
  initial_query_id,
  query_id,
  formatReadableTimeDelta(elapsed) AS time_delta,
  query,
  *
  FROM clusterAllReplicas(default, system.processes)
  WHERE query ILIKE 'SELECT%'
  ORDER BY time_delta DESC;

クエリの停止:

-- 指定されたquery_idを持つすべてのクエリを強制終了します:
KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90'

-- 'username'によって実行されているすべてのクエリを同期的に終了します:
KILL QUERY WHERE user='username' SYNC

:::tip ClickHouse Cloudやセルフマネージドのクラスタでクエリを停止する場合は、ON CLUSTER [cluster-name]オプションを使用して、すべてのレプリカでクエリが確実に停止されるようにしてください。 :::

読み取り専用ユーザーは自分のクエリしか停止できません。

デフォルトでは、非同期バージョン(ASYNC)が使用され、クエリが停止したことの確認を待たずに進行します。

同期バージョン(SYNC)は、すべてのクエリが停止するのを待機し、各プロセスが停止するたびに情報を表示します。応答には、以下の値を持つkill_statusカラムが含まれます:

  1. finished クエリが正常に終了しました。
  2. waiting クエリの終了信号を送信した後、終了を待機しています。
  3. その他の値は、クエリが停止できない理由を説明します。

テストクエリ(TEST)は、ユーザーの権限をチェックし、停止するクエリのリストを表示します。

KILL MUTATION

長時間実行中のミューテーションや未完了のミューテーションがある場合、ClickHouseサービスが正常に動作していないことが示されることがよくあります。ミューテーションの非同期性により、システムの利用可能なすべてのリソースを消費してしまうことがあります。以下のいずれかの対策が必要な場合があります:

  • すべての新しいミューテーション、INSERT、およびSELECTを一時停止し、ミューテーションのキューを完了させる。
  • または、KILLコマンドを送信して、これらのミューテーションの一部を手動で停止する。
KILL MUTATION
  WHERE <system.mutationsテーブルからSELECTするための条件式>
  [TEST]
  [FORMAT format]

現在実行中のミューテーションをキャンセルして削除しようとします。キャンセルするミューテーションは、KILLクエリのWHERE句で指定されたフィルタを使用してsystem.mutationsテーブルから選択されます。

テストクエリ(TEST)は、ユーザーの権限を確認し、停止するミューテーションのリストを表示します。

例:

未完了ミューテーションのcount()を取得:

単一のClickHouseードからのミューテーション数:

SELECT count(*)
FROM system.mutations
WHERE is_done = 0;

レプリカのClickHouseクラスタからのミューテーション数:

SELECT count(*)
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;

未完了のミューテーションのリストを照会:

単一のClickHouseードからのミューテーションのリスト:

SELECT mutation_id, *
FROM system.mutations
WHERE is_done = 0;

ClickHouseクラスタからのミューテーションのリスト:

SELECT mutation_id, *
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;

必要に応じてミューテーションを停止:

-- 単一のテーブル内のすべてのミューテーションをキャンセルして削除:
KILL MUTATION WHERE database = 'default' AND table = 'table'

-- 特定のミューテーションをキャンセル:
KILL MUTATION WHERE database = 'default' AND table = 'table' AND mutation_id = 'mutation_3.txt'

このクエリは、ミューテーションが停止できず完了しない状態(例えば、ミューテーションクエリ内の何らかの関数がテーブル内のデータに適用された際に例外を投げる場合)に役立ちます。

ミューテーションによってすでに行われた変更はロールバックされません。