説明
カラム
policy_name(String) — ストレージポリシーの名前。volume_name(String) — ボリュームの名前。volume_priority(UInt64) — ボリュームの優先度。disks(Array(String)) — このストレージポリシーに含まれるすべてのディスク名の一覧。volume_type(Enum8(‘JBOD’ = 0, ‘SINGLE_DISK’ = 1, ‘UNKNOWN’ = 2)) — ボリュームの種類。JBOD または単一ディスクです。max_data_part_size(UInt64) — ボリューム内のいずれかのディスクに保存できるデータパーツの最大サイズ。move_factor(Float32) — 利用可能な空き容量がこの係数を下回ると、データが自動的に次のボリュームへ移動し始めます (存在する場合。デフォルト値は 0.1) 。prefer_not_to_merge(UInt8) — この設定は使用しないでください。このボリュームでのデータパーツのマージを無効にします (これは有害で、パフォーマンス低下を招きます) 。perform_ttl_move_on_insert(UInt8) — データパーツの INSERT 時の TTL move を無効にします。デフォルトでは (有効な場合) 、TTL move ルールですでに期限切れになっているデータパーツを insert すると、move ルールで指定されたボリュームまたはディスクへ直ちに移動します。load_balancing(Enum8(‘ROUND_ROBIN’ = 0, ‘LEAST_USED’ = 1)) — ディスクの負荷分散ポリシー。round_robinまたはleast_used。
INSERT 時のボリューム選択
INSERT で新しいデータパーツが作成されると、ClickHouse は以下のルールを順に適用して
宛先ディスクを選択します。そのパーツ用の領域を予約でき、かつ条件に一致する
最初のルールが採用されます。それ以外の場合 (ルールが適用されない、空き領域が
ない、または max_data_part_size を超えている場合) は、次のルールの評価に進みます。
- TTL move ルール — 挿入される行に対して
TTL <expr> TO VOLUME 'X'(またはTO DISK 'X') 句の時刻がすでに過ぎており、かつ TTL 宛先ボリューム (TO DISK 'X'の場合はディスクXを含むボリューム) でperform_ttl_move_on_insert = 1(デフォルト) になっている場合、そのパーツは 直接その宛先に書き込まれます。そこでの予約に失敗した場合、INSERTは ステップ 2〜4 にフォールバックします。警告はログに記録されますが、この理由だけでINSERT自体が失敗することはありません。 max_data_part_size— ボリュームは、自身のmax_data_part_sizeを超えるパーツを拒否します。これはボリュームごとに確認されます。 ただし、ディスクを直接対象とするステップ 1 のTTL ... TO DISK 'X'の予約には この制約は適用されません。volume_priority— 残っているボリュームのうち、volume_priorityの値が最も小さいものが選択されます。明示的な<volume_priority>を持たないボリュームは、設定内での定義順に並べられます。load_balancing— ボリュームが選択されると、そのボリューム内のディスクはload_balancingポリシー (round_robinまたはleast_used) に従って選択されます。
オーバーライド
min_free_disk_bytes_to_perform_insert または
min_free_disk_ratio_to_perform_insert が 0 以外の場合、上記の優先順位は
無視されます。INSERT は最も低い
volume_priority を持つボリュームだけを試し、そのボリューム内のどのディスクも
しきい値を満たさない場合は NOT_ENOUGH_SPACE をスローします。
system データベースへの INSERT は対象外です。perform_ttl_move_on_insert は、ソースボリュームではなく
TTL 宛先ボリュームから読み取られます。
TO DISK 'X' ルールでは、このフラグは
ディスク X を含むボリュームから読み取られます。ポリシー内の他のボリュームで
これを設定しても、INSERT パスには影響しません。INSERT で
volume_priority を優先させたい場合は、TTL 宛先ボリューム
(TO DISK 'X' の場合はディスク X を含むボリューム) で
perform_ttl_move_on_insert = 0 を設定します。すると、パーツはまず
priority-N のボリュームに書き込まれ、その後バックグラウンドの移動タスクによって
TTL 宛先へ移動されます (system.moves で確認できます) 。詳しくは
perform_ttl_move_on_insert setting on the MergeTree engine
を参照してください。