system.storage_policies
説明
サーバー構成で定義されたストレージポリシーおよびボリュームに関する情報を含みます。
カラム
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) による移動を無効にします。デフォルトでは (有効な場合) 、有効期限 (TTL) の移動ルールですでに期限切れになっているデータパーツを insert すると、そのパーツは直ちに移動ルールで指定されたボリューム/ディスクに送られます。load_balancing(Enum8('ROUND_ROBIN' = 0, 'LEAST_USED' = 1)) — ディスクの負荷分散ポリシー。round_robinまたはleast_usedです。
INSERT 時のボリューム選択
INSERT で新しいデータパーツが作成されると、ClickHouse は以下のルールを順に評価して宛先ディスクを選択します。最初に一致し、かつそのパーツの領域を予約できるルールが採用されます。それ以外の場合 (ルールが適用されない、空き容量がない、または max_data_part_size を超える場合) は、次のルールの評価に進みます。
- TTL 移動ルール — 挿入対象の行に対して
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 パスには影響しません。
「すでに期限切れ」の TTL 移動ルールが適用される場合でも、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
を参照してください。