メインコンテンツへスキップ

説明

サーバー設定 で定義されるストレージポリシーとボリュームに関する情報です。

カラム

  • 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 を超えている場合) は、次のルールの評価に進みます。
  1. 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 自体が失敗することはありません。
  2. max_data_part_size — ボリュームは、自身の max_data_part_size を超えるパーツを拒否します。これはボリュームごとに確認されます。 ただし、ディスクを直接対象とするステップ 1 の TTL ... TO DISK 'X' の予約には この制約は適用されません。
  3. volume_priority — 残っているボリュームのうち、 volume_priority の値が最も小さいものが選択されます。明示的な <volume_priority> を持たないボリュームは、設定内での定義順に並べられます。
  4. 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 move ルールが適用される場合でも、INSERTvolume_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 を参照してください。
最終更新日 2026年6月10日