KILL ステートメント
KILL ステートメントには 2 種類あります。クエリを KILL するものと、ミューテーションを KILL するものです。
KILL QUERY
現在実行中のクエリの強制終了を試みます。
終了対象のクエリは、KILL クエリの WHERE 句で定義された条件に基づいて、system.processes テーブルから選択されます。
例:
まず、未完了のクエリ一覧を取得する必要があります。次の SQL クエリは、実行時間が長いものから順に取得します:
単一の ClickHouse ノードからの一覧:
ClickHouse クラスターの一覧:
クエリを強制終了する:
ClickHouse Cloud または自己管理クラスタでクエリを強制終了する場合は、必ず ON CLUSTER [cluster-name] オプションを使用して、すべてのレプリカ上でクエリが確実に停止されるようにしてください。
読み取り専用ユーザーは、自分が実行したクエリのみ停止できます。
デフォルトでは、クエリの非同期バージョン(ASYNC)が使用され、クエリが停止したことの確認を待ちません。
同期バージョン(SYNC)は、すべてのクエリが停止するまで待機し、各プロセスが停止する際の情報を表示します。
レスポンスには kill_status 列が含まれ、次の値を取ることができます。
finished– クエリは正常に停止しました。waiting– 終了シグナル送信後に、クエリが終了するのを待機しています。- その他の値は、クエリを停止できない理由を説明します。
テストクエリ(TEST)は、ユーザーの権限のみを確認し、停止対象となるクエリの一覧を表示します。
KILL MUTATION
長時間実行している、または未完了の MUTATION が存在する場合、多くの場合は ClickHouse サービスが正常に動作していないことを示しています。MUTATION の非同期的な性質により、システム上の利用可能なリソースをすべて消費してしまうことがあります。次のいずれかの対応が必要になる場合があります:
- すべての新しい
MUTATION、INSERT、SELECTを一時停止し、キュー内のMUTATIONが完了するのを待つ。 - もしくは、
KILLコマンドを送信して、これらの一部のMUTATIONを手動で強制終了する。
現在実行中の mutation をキャンセルして削除します。キャンセル対象の mutation は、KILL クエリの WHERE 句で指定されたフィルタを使って、system.mutations テーブルから選択されます。
テストクエリ(TEST)はユーザーの権限を確認し、停止対象の mutation の一覧だけを表示します。
例:
未完了の mutation の件数を count() で取得する:
単一の ClickHouse ノードにおける mutation の件数:
ClickHouse レプリカクラスタ内のミューテーション数:
未完了のミューテーション一覧を取得する:
単一の ClickHouse ノード上のミューテーション一覧:
ClickHouse クラスターのミューテーション一覧:
必要に応じてミューテーションを終了します:
このクエリは、ミューテーションがスタックして終了できない場合(たとえば、ミューテーションクエリ内のある関数が、テーブルに含まれるデータへ適用された際に例外をスローする場合など)に有用です。
ミューテーションによってすでに行われた変更はロールバックされません。
system.mutations テーブルの is_killed=1 列(ClickHouse Cloud のみ)は、必ずしもミューテーションが完全に完了したことを意味しません。is_killed=1 かつ is_done=0 の状態のまま、そのミューテーションが長時間残る可能性があります。これは、他の長時間実行中のミューテーションが kill されたミューテーションをブロックしている場合に発生し得ます。これは正常な状況です。