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

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 を超える場合) は、次のルールの評価に進みます。

  1. TTL 移動ルール — 挿入対象の行に対して 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) に従って選択されます。
Override

min_free_disk_bytes_to_perform_insert または min_free_disk_ratio_to_perform_insert が 0 以外の場合、上記の優先順位はバイパスされます。INSERTvolume_priority が最も低いボリュームだけを試し、そのボリューム内にしきい値を満たすディスクがない場合は NOT_ENOUGH_SPACE を送出します。system データベースへの INSERT は対象外です。

注記

perform_ttl_move_on_insert は、ソースボリュームではなく TTL 宛先ボリュームから読み取られます。TO DISK 'X' ルールでは、このフラグはディスク X を含むボリュームから読み取られます。ポリシー内の他のボリュームに設定しても、INSERT パスには影響しません。

「すでに期限切れ」の TTL 移動ルールが適用される場合でも、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 を参照してください。