説明
サーバー設定 で定義されるストレージポリシーとボリュームに関する情報です。
カラム
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 ルールですでに有効期限を過ぎたデータパーツを挿入すると、直ちに移動ルールで指定されたボリュームまたはディスクに配置されます。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) に従って選択されます。
「すでに期限切れ」の TTL move ルールが適用される場合でも、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
を参照してください。