Skip to main content
这些设置可在 system.merge_tree_settings 中查看,且由 ClickHouse 源代码自动生成。

min_absolute_delay_to_close

在关闭、停止处理请求并且状态检查不再返回 Ok 之前的最小绝对延迟。

min_columns_to_activate_adaptive_write_buffer

通过使用自适应写入缓冲区,可降低包含大量列的表的内存使用量。 该值会与宽分片写入的流数量进行比较,后者可能远超列数:包含许多桶的 Map,或深度嵌套的 Array 或 Tuple,单个列会写入许多流,且每个流都会分配一个写入缓冲区。 可选值:
  • 0 - 禁用
  • 1 - 始终启用

min_compress_block_size

写入下一个标记时,触发压缩所需的未压缩数据块的最小大小。你也可以在全局设置中指定此设置 (参见 min_compress_block_size 设置) 。创建表时指定的值会覆盖此设置的全局值。

min_index_granularity_bytes

数据粒度的最小允许大小 (单位:字节) 。 用于防止因误操作创建 index_granularity_bytes 极低的表。

min_marks_to_honor_max_concurrent_queries

应用 max_concurrent_queries 设置时,查询至少需要读取的标记数。
查询仍会受到其他 max_concurrent_queries 设置的限制。
可能的值:
  • 正整数。
  • 0 — 已禁用 (max_concurrent_queries 限制不应用于任何查询) 。
示例

min_merge_bytes_to_use_direct_io

合并操作中,使用直接 I/O 访问存储磁盘所需的最小数据量。合并数据分区片段时,ClickHouse 会计算所有待合并数据的总存储量。如果该存储量超过 min_merge_bytes_to_use_direct_io 字节,ClickHouse 就会通过直接 I/O 接口 (O_DIRECT 选项) 从存储磁盘读取和写入数据。如果 min_merge_bytes_to_use_direct_io = 0,则会禁用直接 I/O。

min_partition_age_to_force_merge_seconds

如果某个分区中的每个 分片 都比该值更旧 (即该分区不再接收插入) ,则合并该分区中的 分片。与 min_age_to_force_merge_seconds 搭配 min_age_to_force_merge_on_partition_only 不同的是,该分区无需能在单次合并中处理完:每次合并仍会遵循 max_bytes_to_merge_at_max_space_in_pool。适用于 Simple 和 StochasticSimple 合并选择器。 此处比较的年龄是分区中最新 分片 的年龄 (now - modification_time,在其各个 分片 中取最小值) ,因此只有当每个 分片 的年龄都超过该值后,该规则才会生效。任何新的 分片 都会将其重置:插入、 变更,以及该设置本身所分配的每次合并,因为合并产生的 分片 也是新的。因此,一旦某次强制合并完成,强制机制便会解除,只有在再次经过该值所指定的时长且期间没有产生新 分片 后才会重新生效;所以需要多次合并的分区会在以该 时间间隔为间隔的若干轮次中逐步压缩,而不是在一次连续过程中完成。 强制机制的工作方式与 min_age_to_force_merge_seconds 完全相同:它会免除通常用于阻止分配不均衡合并的 大小比率要求,同时也会免除 min_parts_to_merge_at_once 下限,因此一次 强制合并可以覆盖少于该下限所要求数量的 分片。其他 启发式规则不会被关闭:merge_selector_window_size 仍会限定哪些 分片 会被检查,而 merge_selector_enable_heuristic_to_remove_small_parts_at_right 仍会从选定的包含三个或更多 分片 的范围中裁剪掉尾随的小 分片。 如果某个 workload 需要关闭其中任意一项,必须通过其各自的设置显式关闭。 在 Simple 和 StochasticSimple 合并选择器下,本设置不能与 min_age_to_force_merge_seconds 及 min_age_to_force_merge_on_partition_only 组合使用。该组合会一次性合并整个分区, 并且只有这种合并才会被标记为 final,而这正是 ReplacingMergeTree 得以执行 CLEANUP 的前提;按分区年龄强制执行常规合并会抢先将其打断。 对于能在单次合并中处理完的分区请使用该组合,对于无法如此处理的分区请使用本设置。其他选择器会忽略本设置,因此与它们组合使用是允许的。 可能的值:
  • 正整数。

min_parts_to_merge_at_once

合并选择器一次可选中进行合并的最少数据分区片段数 (属于专家级设置;如果你不了解其作用,请不要更改) 。 0 - 已禁用。适用于 Simple 和 StochasticSimple 合并选择器。

min_replicated_logs_to_keep

即使这些记录已过时,也会在 ZooKeeper 日志中保留大约这么多条最新记录。它不会影响表的运行:仅用于在清理前诊断 ZooKeeper 日志。 可能的值:
  • 任何正整数。

min_unreserved_disk_space_for_merge

此设置指定留出多少尚未预留的磁盘空间 (以字节为单位) , 不供后台合并使用,以免后台合并挤占插入操作所需的空间。系统会从 可用空间中减去该值,再根据剩余空间计算合并源 parts 总大小的上限, 并额外留出安全余量,使允许的最大合并所需空间远小于剩余空间。 随着磁盘逐渐填满,这一上限会逐步降低;当可用空间降至指定大小时, 上限变为零,此时不会选择任何后台合并。 (0 表示禁用) 与 keep_free_space_bytes 不同,ClickHouse 自身仍可使用受保护的空间; 此设置只是不让合并调度使用该空间。变更不受此限制,仍可能占用受保护的空间。 此设置对空间不受限的磁盘 (如对象存储) 没有影响。 由带有 FINAL 或显式指定 PARTITION 的 OPTIMIZE 发起的合并会忽略此设置。只要上限大于零,无论大小,都会选择删除完全 过期的 parts 的合并;上限为零时则不会选择任何后台合并。每次合并 至少预留 1 MiB,因此,如果合并启动时受保护空间之外剩余不足 1 MiB, 它最多可能占用 1 MiB 的受保护空间。如果不带 WHERE 的行生存时间 (TTL) 是表唯一的 TTL,ReplicatedMergeTree 副本即使自身上限为零, 也会执行队列中的删除操作。如果存在 GROUP BY、WHERE 或列 TTL, 此类删除操作会重写剩余的行:ReplicatedMergeTree 会根据其 parts 的大小 推迟执行,但 MergeTree 不会,可能将这些行写入受保护的空间。 当上限为零时,普通的 OPTIMIZE 不会分配合并任务:它要么不执行任何操作, 要么在 optimize_throw_if_noop = 1 时抛出 CANNOT_ASSIGN_OPTIMIZE。 使用 FINAL 或显式指定 PARTITION 可在受保护的空间内进行合并。对于 ReplicatedMergeTree,只有将操作加入队列的副本上此设置非零时, 该豁免才会记录在复制日志条目中。因此,在设置值为 0 时加入队列的 OPTIMIZE 仍受预留空间限制。 ALTER TABLE ... MODIFY SETTING 不会复制到其他副本,因此应为每个副本设置 相同的值:留出更多受保护空间的副本会将自身限制重新应用于其他副本分配的合并, 可能无限期推迟这些合并。在每个副本都运行支持此设置的版本之前,请将值 保持为 0:旧版副本无法解析为豁免合并写入的日志条目,因此会停止拉取 该表的后续条目,包括普通插入操作对应的条目。