> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 包含服务器配置中定义的存储策略和卷信息的系统表。

# system.storage_policies

<div id="description">
  ## 描述
</div>

包含有关存储策略和卷的信息，这些内容在[服务器配置](/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes_configure)中定义。

<div id="columns">
  ## 列
</div>

* `policy_name` ([String](/zh/reference/data-types/index)) — 存储策略的名称。
* `volume_name` ([String](/zh/reference/data-types/index)) — 卷的名称。
* `volume_priority` ([UInt64](/zh/reference/data-types/index)) — 卷的优先级。
* `disks` ([Array(String)](/zh/reference/data-types/index)) — 此存储策略包含的所有磁盘名称列表。
* `volume_type` ([Enum8('JBOD' = 0, 'SINGLE\_DISK' = 1, 'UNKNOWN' = 2)](/zh/reference/data-types/index)) — 卷的类型：JBOD 或单磁盘。
* `max_data_part_size` ([UInt64](/zh/reference/data-types/index)) — 可存储在该卷任意磁盘上的数据分区片段的最大大小。
* `move_factor` ([Float32](/zh/reference/data-types/index)) — 当可用空间低于此因子时，数据会自动开始移动到下一个卷 (如果有的话)  (默认值为 0.1) 。
* `prefer_not_to_merge` ([UInt8](/zh/reference/data-types/index)) — 不应使用此设置。它会禁用此卷上数据分区片段的合并 (这会带来负面影响，并导致性能下降) 。
* `perform_ttl_move_on_insert` ([UInt8](/zh/reference/data-types/index)) — 禁止在对数据分区片段执行 INSERT 时进行 TTL move。默认情况下 (如果启用) ，如果插入的数据分区片段已满足 TTL move 规则，则会立即被放入该移动规则中声明的卷/磁盘。
* `load_balancing` ([Enum8('ROUND\_ROBIN' = 0, 'LEAST\_USED' = 1)](/zh/reference/data-types/index)) — 磁盘负载均衡策略，`round_robin` 或 `least_used`。

<div id="volume-selection-on-insert">
  ## `INSERT` 时的卷选择
</div>

当 `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` (默认值) ，则该分片会直接写入该目标位置。如果该处预留空间失败，插入会回退到步骤 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`) 进行选择。

<Info>
  **覆盖**

  如果 `min_free_disk_bytes_to_perform_insert` 或
  `min_free_disk_ratio_to_perform_insert` 非零，则会绕过上述优先顺序。
  `INSERT` 只会尝试 `volume_priority` 最低的那个卷，如果该卷中没有任何磁盘
  满足阈值，则会抛出 `NOT_ENOUGH_SPACE`。插入到 `system` 数据库的操作不受此限制。
</Info>

<Note>
  `perform_ttl_move_on_insert` 是从 **TTL 目标** 卷读取的，
  而不是从源卷读取。对于 `TO DISK 'X'` 规则，该标志会从
  包含磁盘 `X` 的卷读取。在该策略中的任何其他卷上设置它，
  都不会影响插入路径。
</Note>

若要强制插入在“已过期”的 TTL move 规则生效时仍遵循 `volume_priority`，请在
TTL 目标卷上将 `perform_ttl_move_on_insert = 0` (对于 `TO DISK 'X'`，则设置在包含
磁盘 `X` 的卷上) 。这样，该分片会先写入优先级为 N 的卷，然后再由后台移动任务
移至 TTL 目标位置 (可通过
`system.moves` 观察) 。请参阅
[MergeTree 引擎中的 `perform_ttl_move_on_insert` 设置](/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes_configure)。
