このテーブルには、MergeTree テーブルの ミューテーション と、その進行状況に関する情報が含まれています。各ミューテーションコマンドは 1 行で表されます。
database (String) — ミューテーションが適用されたデータベース名。
table (String) — ミューテーションが適用されたテーブル名。
mutation_id (String) — ミューテーションの ID。レプリケートテーブルでは、これらの ID は ClickHouse Keeper の <table_path_in_clickhouse_keeper>/mutations/ ディレクトリ内の znode 名に対応します。非レプリケートテーブルでは、ID はテーブルのデータディレクトリ内のファイル名に対応します。
command (String) — ミューテーションのコマンド文字列 (クエリの ALTER TABLE [db.]table より後の部分) 。
create_time (DateTime) — ミューテーションコマンドが実行のために送信された日時。
block_numbers.partition_id (Array(String)) — レプリケートテーブルのミューテーションでは、この配列にパーティションの ID が含まれます (各パーティションにつき 1 レコード) 。非レプリケートテーブルのミューテーションでは、この配列は空です。
block_numbers.number (Array(Int64)) — レプリケートテーブルのミューテーションでは、この配列には各パーティションにつき 1 レコードが含まれ、そのミューテーションで取得されたブロック番号が格納されます。各パーティションでは、この番号より小さい番号のブロックを含むパーツだけがミューテーションの対象になります。非レプリケートテーブルでは、すべてのパーティションのブロック番号は単一のシーケンスを形成します。つまり、非レプリケートテーブルのミューテーションでは、このカラムには、そのミューテーションで取得された単一のブロック番号を持つ 1 レコードが含まれます。
parts_in_progress_names (Array(String)) — 現在ミューテーション中のデータパーツ名の配列。
parts_to_do_names (Array(String)) — ミューテーション完了のために処理が必要なデータパーツ名の配列。
parts_to_do (Int64) — ミューテーション完了のために処理が必要なデータパーツ数。注: parts_to_do = 0 であっても、新しいデータパーツを作成する長時間実行中の INSERT により、そのデータパーツにもミューテーションが必要になるため、レプリケートテーブルのミューテーションがまだ完了していない場合があります。
parts_postpone_reasons (Map(String, String)) — part 名と、それぞれが保留されている理由のマップ。
is_done (UInt8) — ミューテーションが完了しているかどうかを示すフラグ。設定可能な値: ミューテーションが完了している場合は 1、まだ処理中の場合は 0。
is_killed (UInt8) — ミューテーションが kill されたかどうかを示します。ClickHouse Cloud でのみ利用可能です。注: is_killed=1 は、ミューテーションが完全に終了したことを必ずしも意味しません。is_killed=1 かつ is_done=0 の状態のまま、ミューテーションが長時間残ることがあります。これは、別の長時間実行中のミューテーションが、kill されたミューテーションをブロックしている場合に発生することがあります。これは正常な状態です。
latest_failed_part (String) — 直近でミューテーションに失敗したパーツ名。
latest_fail_time (DateTime) — 直近のパートミューテーション失敗日時。
latest_fail_reason (String) — 直近のパートミューテーション失敗の原因となった例外メッセージ。
latest_fail_error_code_name (String) — 直近のパートミューテーション失敗の原因となった例外のエラーコード。
- パーツ名が
parts_postpone_reasons に含まれておらず、まだミューテーションされていない場合、そのパーツはまだミューテーション対象としてスケジュールされていないことを意味します。
- パーツ名
all_parts は、まだミューテーションされていないすべてのパーツを表します。
is_killed (UInt8) — ミューテーションが kill されたかどうかを示します。ClickHouse Cloud でのみ利用できます。
is_killed=1 であっても、必ずしもミューテーションが完全に終了していることを意味するわけではありません。is_killed=1 かつ is_done=0 の状態が長時間続くことがあります。これは、別の長時間実行中のミューテーションが、kill されたミューテーションをブロックしている場合に発生します。これは正常な状態です。
is_done (UInt8) — ミューテーションが完了しているかどうかを示すフラグです。設定可能な値:
- ミューテーションが完了している場合は
1
- ミューテーションがまだ進行中の場合は
0
parts_to_do = 0 であっても、長時間実行される INSERT クエリによって、ミューテーション の対象となる新しい データパーツ が作成されるため、レプリケートテーブルの ミューテーション がまだ完了していない可能性があります。
一部の データパーツ の ミューテーション で問題が発生した場合、次のカラムに追加情報が含まれます。
latest_failed_part (String) — ミューテーション できなかった直近のパーツ名。
latest_fail_time (DateTime) — 直近の part ミューテーション が失敗した日時。
latest_fail_reason (String) — 直近の part ミューテーション が失敗した原因となった例外メッセージ。
system.mutationsテーブルで進行状況を確認するには、次のクエリを使用します。
SELECT * FROM clusterAllReplicas('cluster_name', 'system', 'mutations')
WHERE is_done = 0 AND table = 'tmp';
-- または
SELECT * FROM clusterAllReplicas('cluster_name', 'system.mutations')
WHERE is_done = 0 AND table = 'tmp';
注: これには system.* テーブルへの読み取り権限が必要です。
Cloud での使用ClickHouse Cloud では、各ノードの system.mutations テーブルにクラスター内のすべての ミューテーション が含まれているため、clusterAllReplicas は不要です。