system.merge_tree_settings 显示全局设置的 MergeTree 设置。
MergeTree 设置可以在服务器配置文件的 merge_tree 部分中进行设置,也可以针对每个 MergeTree 表,在 CREATE TABLE 语句的 SETTINGS 子句中单独指定。
自定义设置 max_suspicious_broken_parts 的示例:
在服务器配置文件中为所有 MergeTree 表配置默认值:
ALTER TABLE ... MODIFY SETTING 更改特定表的 Settings:
MergeTree 设置
adaptive_write_buffer_initial_size
add_implicit_sign_column_constraint_for_collapsing_engine
sign 列添加隐式约束,
只允许使用有效值 (1 和 -1) 。
add_minmax_index_for_block_number_column
_block_number 添加一个隐式 min-max (跳过) 索引。
需要设置 enable_block_number_column = 1 才能生效。该索引仅在合并期间构建,
不会在插入期间构建:在写入时,块编号还是临时的,因此只会为一个常量建立索引。
add_minmax_index_for_block_offset_column
_block_offset 添加隐式的最小-最大 (跳过) 索引。
需要将 enable_block_offset_column = 1 才会生效。该索引仅在合并期间构建,
不会在插入期间构建。
add_minmax_index_for_numeric_columns
add_minmax_index_for_string_columns
add_minmax_index_for_temporal_columns
allow_coalescing_columns_in_partition_or_order_key
allow_commit_order_projection
_block_number 和 _block_offset 虚拟列,并在 merges 过程中保留原始插入顺序。
要求同时启用 enable_block_number_column 和 enable_block_offset_column。
allow_experimental_replacing_merge_with_cleanup
is_deleted
列的 ReplacingMergeTree 使用实验性的 CLEANUP 合并。启用后,可使用 OPTIMIZE ... FINAL CLEANUP 手动将一个分区中的所有 parts
合并为单个 part,并删除所有
已删除的行。
还允许通过设置 min_age_to_force_merge_seconds、
min_age_to_force_merge_on_partition_only 和
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge,
使此类合并在后台自动执行。
allow_experimental_reverse_key
allow_experimental_reverse_key 后,您可以在 MergeTree 表的 ORDER BY 子句中定义降序排序。这使得降序查询可以使用效率更高的 ReadInOrder 优化,而不是 ReadInReverseOrder。
示例
ORDER BY time DESC 时,会启用 ReadInOrder。
默认值: false
allow_floating_point_partition_key
0— 不允许使用浮点分区键。1— 允许使用浮点分区键。
allow_nullable_key
allow_part_offset_column_in_projections
allow_reduce_blocking_parts_task
allow_remote_fs_zero_copy_replication
allow_summing_columns_in_partition_or_order_key
allow_suspicious_indices
allow_vertical_merges_from_compact_to_wide_parts
alter_column_secondary_index_mode
ALTER 命令,以及在允许时应采取的处理方式。默认情况下,此类 ALTER 命令是允许的,并且会重建这些索引。
可能的值:
rebuild(默认) :重建ALTER命令中受该列影响的所有次级索引。throw:通过抛出异常,阻止对受显式次级索引覆盖的列执行任何ALTER。隐式索引不受此限制影响,仍会被重建。drop:删除依赖的次级索引。新的 parts 将不再包含这些索引,因此需要使用MATERIALIZE INDEX重新创建。compatibility:与原始行为保持一致:对ALTER ... MODIFY COLUMN使用throw,对ALTER ... UPDATE/DELETE使用rebuild。ignore:仅供高级用户使用。它会使索引保持不一致状态,可能导致错误的查询结果。
always_fetch_merged_part
- true, false
always_use_copy_instead_of_hardlinks
apply_patches_on_merge
assign_part_uuids
async_block_ids_cache_update_wait_ms
async_insert
auto_statistics_types
background_task_preferred_step_execution_time_ms
cache_populated_by_fetch
此设置仅适用于 ClickHouse Cloud。
cache_populated_by_fetch 被禁用时 (默认设置) ,新的数据 parts
只有在运行查询且该查询需要这些 parts 时,才会加载到文件系统缓存中。
如果启用,cache_populated_by_fetch 则会使所有节点将新的数据 parts
从存储加载到各自的文件系统缓存中,而无需由查询
来触发此操作。
另请参阅
cache_populated_by_fetch_filename_regexp
此设置仅适用于 ClickHouse Cloud。
cache_populated_by_fetch) 。
check_delay_period
check_sample_column_is_correct
UInt8、UInt16、
UInt32、UInt64。
可能的值:
true— 启用该检查。false— 在创建表时禁用该检查。
true。
默认情况下,ClickHouse server 会在创建表时检查用于采样的列或采样表达式的数据类型。如果你已经有使用了错误采样表达式的表,并且不希望服务器在启动期间引发异常,请将 check_sample_column_is_correct 设置为 false。
clean_deleted_rows
cleanup_delay_period
cleanup_delay_period_random_add
cleanup_thread_preferred_points_per_iteration
cleanup_threads
clone_replica_zookeeper_create_get_part_batch_size
columns_and_secondary_indices_sizes_lazy_calculation
columns_to_prewarm_mark_cache
compact_parts_max_bytes_to_buffer
compact_parts_max_granules_to_buffer
compact_parts_merge_max_bytes_to_prefetch_part
compatibility_allow_sampling_expression_not_in_primary_key
compress_marks
compress_per_column_in_compact_parts
compress_primary_key
concurrent_part_removal_threshold
max_part_removal_threads) 。
concurrent_part_removal_threshold_for_remote_disk
concurrent_part_removal_threshold 相同,但用于至少有一个
被移除的 part 存储在远程磁盘上的情况。默认值之所以更低,
是因为在远程存储上移除每个 part 通常都需要一次网络
往返 (例如,在对象存储上,每个 part 都需要一次 HTTP DELETE) ,因此
即使串行移除 100 个 part,也可能让 DROP TABLE 卡住数十秒。
deduplicate_merge_projection_mode
ignore 选项纯粹是出于兼容性考虑,可能会导致结果不正确。否则,如果允许,
则该设置决定在合并投影时执行的操作,即 drop 或 rebuild。因此,经典
MergeTree 会忽略此设置。它也控制 OPTIMIZE DEDUPLICATE,
但对所有 MergeTree 家族成员都生效。与
选项 lightweight_mutation_projection_mode 类似,它也是 part 级别的。
可能的值:
ignorethrowdroprebuild
default_compression_codec
- 在表声明中为该列定义的压缩编解码器
- 在
default_compression_codec中定义的压缩编解码器 (此设置) - 在
compression设置中定义的默认压缩编解码器 默认值:空字符串 (未定义) 。
detach_not_byte_identical_parts
MergeTree 表。
可能的值:
0— 数据 parts 会被移除。1— 数据 parts 会被分离。
detach_old_local_parts_when_cloning_replica
truefalse
disable_detach_partition_for_zero_copy_replication
disable_fetch_partition_for_zero_copy_replication
disable_freeze_partition_for_zero_copy_replication
disk
distributed_index_analysis_min_indexes_bytes_to_activate
distributed_index_analysis_min_parts_to_activate
dynamic_serialization_version
v1v2v3
enable_block_number_column
enable_block_offset_column
_block_offset。
enable_index_granularity_compression
enable_max_bytes_limit_for_min_age_to_force_merge
min_age_to_force_merge_seconds 和
min_age_to_force_merge_on_partition_only 是否遵循设置
max_bytes_to_merge_at_max_space_in_pool。
可能的值:
truefalse
enable_mixed_granularity_parts
index_granularity_bytes 设置控制粒度大小。
在 19.11 版本之前,只有 index_granularity 设置可用于限制粒度大小。
index_granularity_bytes 设置可在从包含大行 (数十到数百 MB) 的表中选择数据时提升 ClickHouse 性能。
如果您的表包含大行,可以为这些表启用此设置,以提高 SELECT 查询的效率。
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge
allow_experimental_replacing_merge_with_cleanup、
min_age_to_force_merge_seconds 和 min_age_to_force_merge_on_partition_only。
可能的值:
truefalse
enable_the_endpoint_id_with_zookeeper_name_prefix
enable_vertical_merge_algorithm
enforce_index_structure_match_on_partition_manipulation
ATTACH/MOVE/REPLACE PARTITION) 的目标表启用此设置,则源表与目标表的索引和投影必须完全一致。否则,目标表可以包含源表索引和投影的超集。
escape_index_filenames
escape_variant_subcolumn_filenames
exclude_deleted_rows_for_part_size_in_merge
DELETE FROM 删除的那些行) 进行判断。请注意,此行为只会对在启用此设置后执行 DELETE FROM 所影响的数据 parts 生效。
可能的值:
truefalse
exclude_materialize_skip_indexes_on_merge
execute_merges_on_single_replica_time_threshold
- 任意正整数。
fault_probability_after_part_commit
提交 part 前的故障概率
finished_mutations_to_keep
force_read_through_cache_for_merges
fsync_after_insert
fsync_part_directory
in_memory_parts_enable_wal
in_memory_parts_insert_sync
inactive_parts_to_delay_insert
inactive_parts_to_delay_insert 的值,则会人为降低
INSERT 的速度。
可能的值:
- 任意正整数。
inactive_parts_to_throw_insert
inactive_parts_to_throw_insert 的值,INSERT 将被中断,并抛出
以下错误:
“非活跃 parts 过多 (N) 。parts 清理速度明显 慢于插入操作” 异常。”可能的值:
- 任意正整数。
index_granularity
index_granularity_bytes
0 (不推荐) 。
initialization_retry_period
kill_delay_period
kill_delay_period_random_add
kill_threads
lightweight_mutation_projection_mode
DELETE 不适用于带有
projection 的表。这是因为 projection 中的行可能会受到
DELETE 操作的影响。因此,默认值为 throw。不过,这个
选项可以改变这种行为。当取值为 drop 或 rebuild 时,
删除操作将可与 projection 一起使用。drop 会删除 projection,因此在当前查询中
可能会更快,因为 projection 会被删除;但在后续查询中可能会变慢,
因为不再附加 projection。rebuild 会重建
projection,这可能会影响当前查询的性能,但
可能会加快后续查询。好的一点是,这些选项
只会在 part 级别生效,这意味着未被触及的分片中的 projection
将保持不变,而不会触发诸如
drop 或 rebuild 之类的任何操作。
可能的值:
throwdroprebuild
load_existing_rows_count_for_old_parts
truefalse
lock_acquire_timeout_for_background_operations
map_buckets_coefficient
sqrt 和 linear map_buckets_strategy 中,用于根据平均 map 大小计算桶数量的系数。
对于 sqrt 策略:round(map_buckets_coefficient * sqrt(avg_map_size))。
对于 linear 策略:round(map_buckets_coefficient * avg_map_size)。
当 map_buckets_strategy 为 constant 时,此设置会被忽略。
map_buckets_min_avg_size
with_buckets 序列化所需的最小平均 Map 大小 (每行的键数) 。
如果平均 Map 大小小于该值,则无论其他桶设置如何,都只使用单个桶。
值为 0 时将禁用该阈值,并始终应用分桶策略。
此设置可用于避免对较小的 Map 使用分桶序列化所带来的额外开销,因为这种情况下收益微乎其微。
map_buckets_strategy
with_buckets Map 序列化中,基于平均 map 大小选择桶数量的策略。
可能的值:
- constant — 始终使用 max_buckets_in_map 作为桶数量,而不考虑平均 map 大小。
- sqrt — 使用
round(map_buckets_coefficient * sqrt(avg_map_size))作为桶数量,并将其限制在[1, max_buckets_in_map]范围内。 - linear — 使用
round(map_buckets_coefficient * avg_map_size)作为桶数量,并将其限制在[1, max_buckets_in_map]范围内。
map_serialization_version
Map 列使用的序列化方法。
可能的值:
- basic — 对
Map使用标准序列化。 - with_buckets — 在序列化时将键拆分到多个桶中。使用桶可提升从 Map 中读取单个键的效率。
with_buckets serialization 中的桶数量由 max_buckets_in_map 和 map_buckets_strategy 决定。
map_serialization_version_for_zero_level_parts
Map 列指定不同的序列化版本。
在零级 parts 中保留 basic 序列化有助于避免
插入期间性能下降,同时对合并后的 parts 使用 with_buckets。
marks_compress_block_size
marks_compression_codec
materialize_skip_indexes_on_merge
materialize_statistics_on_merge
materialize_ttl_recalculate_only
max_avg_part_size_for_too_many_parts
max_buckets_in_map
Map 序列化的最大桶数。与 with_buckets Map 序列化配合使用。
实际桶数由 map_buckets_strategy 决定。
允许的最大值为 256。
max_bytes_to_merge_at_max_space_in_pool
- 任意非负整数。
max_bytes_to_merge_at_max_space_in_pool。
由 OPTIMIZE FINAL 发起的合并会忽略 max_bytes_to_merge_at_max_space_in_pool (只考虑可用磁盘空间) 。
max_bytes_to_merge_at_min_space_in_pool
- 任意正整数。
max_bytes_to_merge_at_min_space_in_pool 定义了即使在可用磁盘空间不足 (在池中) 的情况下,仍可进行合并的
parts 的最大总大小。这对于减少小 part 的数量以及降低出现
Too many parts 错误的概率是必要的。
合并会按被合并 parts 总大小的两倍预留磁盘空间。
因此,当磁盘剩余空间较少时,可能会出现这样的情况:虽然仍有空闲空间,但这些空间已经被正在进行的大型合并预留,
导致其他合并无法启动,而小 part 的数量会随着每次 insert 持续增长。
max_cleanup_delay_period
max_compress_block_size
max_concurrent_queries
max_concurrent_queries 设置的限制。
可能的值:
- 正整数。
0— 不限制。
0 (不限制) 。
示例
max_delay_to_insert
INSERT 延迟。
可能的值:
- 任意正整数。
INSERT 延迟 (以毫秒为单位) 按以下公式计算:
INSERT
会延迟 pow( 1 * 1000, (1 + 299 - 150) / (300 - 150) ) = 1000
毫秒。
从 23.1 版本开始,公式改为:
INSERT 会延迟 max( 10, 1 * 1000 * (224 - 150 + 1) / (300 - 150) ) = 500 毫秒。
max_delay_to_mutate_ms
max_digestion_size_per_segment
max_file_name_length
replace_long_file_name_to_hash 时生效。
此设置的值不包含文件扩展名的长度。因此,
建议将其设置为略低于文件系统允许的最大文件名长度 (通常为 255
字节) ,并预留一定余量,以避免文件系统错误。
max_files_to_modify_in_alter_columns
- 任意正整数。
max_files_to_remove_in_alter_columns
- 任意正整数。
max_merge_delayed_streams_for_parallel_write
max_merge_selecting_sleep_ms
max_number_of_merges_with_ttl_in_pool
max_number_of_mutations_for_replica
max_part_loading_threads
max_part_removal_threads
max_partitions_to_read
- 任意正整数。
max_parts_in_total
max_parts_in_total 的值,INSERT 将被中断,并抛出 parts 过多 (N) 异常。
可能的值:
- 任意正整数。
max_parts_to_merge_at_once
max_postpone_time_for_failed_mutations_ms
max_postpone_time_for_failed_replicated_fetches_ms
max_postpone_time_for_failed_replicated_merges_ms
max_postpone_time_for_failed_replicated_tasks_ms
max_projections
max_replicated_fetches_network_bandwidth
max_replicated_fetches_network_bandwidth_for_server
设置不同,此设置适用于特定表。
你可以同时限制服务器网络和特定表的网络,但在这种情况下,
表级设置的值应小于服务器级设置的值。否则,服务器只会采用
max_replicated_fetches_network_bandwidth_for_server 设置。
该设置无法做到绝对精确。
可能的值:
- 正整数。
0— 不限。
0。
用法
可用于在复制数据以新增或替换节点时限制速度。
max_replicated_logs_to_keep
- 任意正整数。
max_replicated_merges_in_queue
max_replicated_merges_with_ttl_in_queue
max_replicated_mutations_in_queue
max_replicated_sends_network_bandwidth
max_replicated_sends_network_bandwidth_for_server
设置不同,此设置作用于特定表。
你可以同时限制服务器网络和特定表的网络,但在这种情况下,
表级设置的值应小于服务器级设置的值。否则,服务器只会采用
max_replicated_sends_network_bandwidth_for_server 设置。
该设置无法做到完全精确。
可能的值:
- 正整数。
0— 不限。
max_suspicious_broken_parts
max_suspicious_broken_parts 的值,则不允许自动删除。
可能值:
- 任意正整数。
max_suspicious_broken_parts_bytes
- 任意正整数。
max_uncompressed_bytes_in_patches
merge_max_block_size
- 任意正整数。
merge_max_block_size 行的块从 parts 中读取行,然后
进行合并,并将结果写入新的 part。读取的块会放入 RAM 中,
因此 merge_max_block_size 会影响合并所需的 RAM 大小。
因此,对于行非常宽的表,merges 可能会消耗大量 RAM
(如果平均每行大小为 100kb,那么在合并 10 个 parts 时,
(100kb * 10 * 8192) = ~ 8GB RAM) 。通过减小 merge_max_block_size,
你可以减少一次合并所需的 RAM 量,但会降低合并速度。
merge_max_block_size_bytes
index_granularity_bytes 相同。
merge_max_bytes_to_prewarm_cache
merge_max_dynamic_subcolumns_in_compact_part
merge_max_dynamic_subcolumns_in_wide_part
merge_selecting_sleep_ms
merge_selecting_sleep_slowdown_factor
merge_selector_algorithm
merge_selector_base
merge_selector_blurry_base_scale_factor
merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_once
merge_selector_enable_heuristic_to_remove_small_parts_at_right
sum_size 的指定比例 (0.01) ,则将其移除。
适用于 Simple 和 StochasticSimple 合并选择器
merge_selector_heuristic_to_lower_max_parts_to_merge_at_once_exponent
merge_selector_window_size
merge_total_max_bytes_to_prewarm_cache
merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds
merge_tree_clear_old_parts_interval_seconds
- 任意正整数。
merge_tree_clear_old_temporary_directories_interval_seconds
- 任意正整数。
merge_tree_enable_clear_old_broken_detached
merge_with_recompression_ttl_timeout
merge_with_ttl_timeout
merge_workload
workload 设置值使用。如果未指定 (空字符串) ,则改用服务器设置 merge_workload。
另请参见
min_absolute_delay_to_close
min_age_to_force_merge_on_partition_only
min_age_to_force_merge_seconds 是否仅应作用于整个分区,
而不作用于其子集。
默认情况下,会忽略设置 max_bytes_to_merge_at_max_space_in_pool (请参见
enable_max_bytes_limit_for_min_age_to_force_merge) 。
可能的值:
- true, false
min_age_to_force_merge_seconds
min_age_to_force_merge_seconds
的值,则合并这些 parts。
默认情况下,会忽略设置 max_bytes_to_merge_at_max_space_in_pool
(参见 enable_max_bytes_limit_for_min_age_to_force_merge) 。
可能的值:
- 正整数。
min_bytes_for_compact_part
min_bytes_for_full_part_storage
min_bytes_for_wide_part
Wide
格式存储的数据分区片段的最小字节数/行数。你可以只设置其中一个,也可以两个都设置,或者都不设置。
min_bytes_to_prewarm_caches
min_bytes_to_rebalance_partition_over_jbod
- 正整数。
0— 禁用均衡。
min_bytes_to_rebalance_partition_over_jbod 设置的值
不应小于
max_bytes_to_merge_at_max_space_in_pool
/ 1024 的值。否则,ClickHouse 会抛出异常。
min_columns_to_activate_adaptive_write_buffer
- 0 - 不受限制
- 1 - 始终启用
min_compress_block_size
min_compressed_bytes_to_fsync_after_fetch
fsync 所需的最小压缩字节数 (0 表示禁用)
min_compressed_bytes_to_fsync_after_merge
min_delay_to_insert_ms
min_delay_to_mutate_ms
min_free_disk_bytes_to_perform_insert
min_free_disk_bytes_to_perform_insert,则会抛出异常,并且
不会执行插入。请注意,此设置:
- 会将
keep_free_space_bytes设置考虑在内。 - 不会考虑
INSERT操作即将写入的数据量。 - 仅在指定了正数 (非零) 字节数时才会进行检查
- 任意正整数。
如果同时指定了
min_free_disk_bytes_to_perform_insert 和 min_free_disk_ratio_to_perform_insert,
ClickHouse 将采用允许在更多磁盘空闲空间下执行
插入的那个值。min_free_disk_ratio_to_perform_insert
INSERT 所需的最小空闲磁盘空间占总磁盘空间的比例。必须是一个
介于 0 和 1 之间的浮点值。请注意,此设置:
- 会将
keep_free_space_bytes设置考虑在内。 - 不会考虑
INSERT操作将要写入的数据量。 - 仅在指定了正数 (非零) 比例时才会进行检查
- Float,0.0 - 1.0
min_free_disk_ratio_to_perform_insert 和
min_free_disk_bytes_to_perform_insert,ClickHouse 将采用允许在更多空闲
磁盘空间下执行插入操作的那个值。
min_index_granularity_bytes
index_granularity_bytes 过低的表。
min_level_for_full_part_storage
min_level_for_wide_part
Wide 格式而非 Compact 格式所需的最小 part 级别。
min_marks_to_honor_max_concurrent_queries
查询仍会受到其他
max_concurrent_queries 设置的限制。- 正整数。
0— 已禁用 (max_concurrent_queries限制不适用于任何查询) 。
min_merge_bytes_to_use_direct_io
min_merge_bytes_to_use_direct_io 字节,ClickHouse 将通过直接 I/O 接口 (O_DIRECT 选项)
从存储磁盘读取和写入
数据。如果 min_merge_bytes_to_use_direct_io = 0,则禁用直接 I/O。
min_parts_to_merge_at_once
min_relative_delay_to_close
min_relative_delay_to_measure
min_relative_delay_to_yield_leadership
min_replicated_logs_to_keep
- 任何正整数。
min_rows_for_compact_part
min_rows_for_full_part_storage
min_rows_for_wide_part
Wide 格式而不是 Compact 格式的数据分区片段所需的最少行数。
min_rows_to_fsync_after_merge
mutation_workload
workload 设置值使用。若未指定 (空字符串) ,则改用服务器设置 mutation_workload。
另请参见
non_replicated_deduplication_window
- 任意正整数。
0(禁用去重) 。
notify_newest_block_number
nullable_serialization_version
Nullable(T) 列所使用的序列化方法。
可选值:
-
basic — 使用
Nullable(T)的标准序列化方式。 -
allow_sparse — 允许
Nullable(T)使用稀疏编码。
number_of_free_entries_in_pool_to_execute_mutation
- 任意正整数。
number_of_free_entries_in_pool_to_execute_mutation 设置的值
应小于 background_pool_size 的值
- background_merges_mutations_concurrency_ratio。 否则,ClickHouse 将抛出异常。
number_of_free_entries_in_pool_to_execute_optimize_entire_partition
min_age_to_force_merge_seconds 并启用
min_age_to_force_merge_on_partition_only 时,会生成
此任务) 。这样可以为常规合并
保留空闲线程,并避免出现“parts 过多”。
可能的值:
- 正整数。
number_of_free_entries_in_pool_to_execute_optimize_entire_partition
设置的值应小于
background_pool_size
- background_merges_mutations_concurrency_ratio 的值。 否则,ClickHouse 会抛出异常。
number_of_free_entries_in_pool_to_lower_max_size_of_merge
- 任意正整数。
number_of_mutations_to_delay
number_of_mutations_to_throw
number_of_partitions_to_consider_for_merge
object_serialization_version
v1v2v3
v3 版本支持更改共享数据序列化版本。
compact parts 中 JSON 共享数据 序列化的桶数量。与 map_with_buckets 和 advanced 共享数据 序列化配合使用。
允许的最大值为 256。
用于指定 Wide parts 中 JSON 共享数据序列化的桶数量。与 map_with_buckets 和 advanced 共享数据序列化配合使用。
允许的最大值为 256。
JSON 数据类型中共享数据的序列化版本。
可能的值:
map- 将共享数据存储为Map(String, String)map_with_buckets- 将共享数据存储为多个独立的Map(String, String)列。使用桶可以提升从共享数据中读取单个路径的性能。advanced- 一种专为显著提升从共享数据中读取单个路径性能而设计的特殊共享数据序列化方式。 请注意,这种序列化会增加磁盘上共享数据的存储大小,因为它会存储大量额外信息。
map_with_buckets 和 advanced 序列化的桶数量由以下设置决定:
object_shared_data_buckets_for_compact_part/object_shared_data_buckets_for_wide_part。
此设置允许为插入期间创建的零级 parts 中
JSON 类型内部的共享数据指定不同的序列化版本。
建议不要对零级 parts 使用 advanced 共享数据序列化,因为这可能会显著增加
插入时间。
old_parts_lifetime
- 任意正整数。
old_parts_lifetime 秒后才删除它们。若非活动 parts 未被当前查询使用,即 part 的 refcount 为 1,则会被移除。
不会对新的 parts 调用 fsync,因此在一段时间内,新 parts 仅存在于服务器的 RAM (操作系统缓存) 中。如果服务器意外重启,新 parts 可能会丢失或损坏。为保护数据,非活动 parts 不会被立即删除。
启动期间,ClickHouse 会检查这些 parts 的完整性。如果 merged part 已损坏,ClickHouse 会将非活动 parts 恢复到活动列表中,之后再重新合并。随后,损坏的 part 会被重命名 (添加 broken_ 前缀) 并移至 detached 文件夹中。如果 merged part 未损坏,则原始的非活动 parts 会被重命名 (添加 ignored_ 前缀) 并移至 detached 文件夹中。
默认的 dirty_expire_centisecs 值 (Linux 内核设置) 为 30 秒 (写入数据仅保存在 RAM 中的最长时间) ,但在磁盘系统负载较高时,数据写入的时间可能会明显更晚。根据实验,old_parts_lifetime 取值为 480 秒,在这段时间内可确保新 part 被写入磁盘。
optimize_row_order
DateTime64 类型
时间戳列的主键,通常无法从该设置中获益。
part_minmax_index_columns
partition_key_only— 仅跟踪分区键列。with_block_number_offset— 分区键列,以及持久化的_block_number和_block_offset虚拟列。支持按这些列进行 part 级裁剪。
part_moves_between_shards_delay_seconds
part_moves_between_shards_enable
parts_to_delay_insert
parts_to_delay_insert 的值,INSERT 将被人为放慢。
可能的值:
- 任意正整数。
INSERT 的执行时间 (添加“sleep”) ,以便
后台 合并 进程能够以快于新增 parts 的速度完成合并。
parts_to_throw_insert
parts_to_throw_insert 的值,INSERT 会被中断,并抛出 Too many parts (N). Merges are processing significantly slower than inserts
异常。
可能的值:
- 任意正整数。
SELECT 查询的最佳性能,必须尽可能减少需要处理的 parts 数量,参见 Merge Tree。
在 23.6 版本之前,此设置的值为 300。你可以将其设置为更高的值,这会降低出现 Too many parts
错误的概率,但与此同时,SELECT 性能也可能会下降。另外,如果出现 合并 问题 (例如磁盘空间不足) ,相比使用原始值 300,你会更晚察觉到这个问题。
prefer_fetch_merged_part_size_threshold
prefer_fetch_merged_part_time_threshold,则优先从某个副本拉取已合并的分片,
而不是在本地执行合并。这样可以加快耗时很长的合并操作。
可能的值:
- 任意正整数。
prefer_fetch_merged_part_time_threshold
prefer_fetch_merged_part_size_threshold,则优先从副本拉取合并后的分片,而不是在本地执行合并。这样可以加快耗时很长的合并。
Possible values:
- 任意正整数。
prewarm_mark_cache
prewarm_primary_key_cache
主键压缩块大小,即待压缩数据块的实际大小。
primary_key_compression_codec
primary_key_lazy_load
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns
propagate_types_serialization_versions_to_nested_types
string_serialization_version 这样的序列化版本会传递到 Array/Map/Nullable/JSON 等嵌套类型内部。如果禁用,则序列化版本只会对该类型的顶层列和 Tuple el 生效
ratio_of_defaults_for_sparse_serialization
ratio_of_defaults_for_sparse_serialization
设置为小于 1.0 的值。如果该值大于或等于 1.0,
则这些列始终会使用普通的完整序列化写入。
可能的值:
- 介于
0和1之间的 Float,可启用稀疏序列化 - 如果不想使用稀疏序列化,则设为
1.0(或更大)
s 列在 95% 的
行中都是空字符串。在 my_regular_table 中,我们不使用稀疏序列化;而在
my_sparse_table 中,我们将 ratio_of_defaults_for_sparse_serialization 设置为
0.95:
my_sparse_table 中的 s 列在磁盘上占用的存储空间更小:
system.parts_columns 表中的 serialization_kind 列,
确认某列是否使用了稀疏编码:
s 的哪些部分采用了稀疏序列化存储:
reduce_blocking_parts_sleep_ms
refresh_parts_interval
refresh_statistics_interval
remote_fs_execute_merges_on_single_replica_time_threshold
零拷贝复制尚未准备好用于生产环境。
在 ClickHouse 22.8 及更高版本中,零拷贝复制默认处于禁用状态。不建议在生产环境中使用此功能。
- 任意正整数。
remote_fs_zero_copy_path_compatible_mode
remote_fs_zero_copy_zookeeper_path
remove_empty_parts
remove_rolled_back_parts_immediately
remove_unused_patch_parts
replace_long_file_name_to_hash
replicated_can_become_leader
truefalse
replicated_deduplication_window
- 任意正整数。
- 0 (禁用去重)
Insert 命令会创建一个或多个块 (parts) 。对于
插入去重,
在向复制表写入时,ClickHouse 会将所创建
parts 的哈希和写入 ClickHouse Keeper。哈希和只会为最近的
replicated_deduplication_window 个块保存。最旧的哈希和会
从 ClickHouse Keeper 中移除。
较大的 replicated_deduplication_window 值会减慢 Inserts
速度,因为需要比较更多条目。哈希和是根据
字段名称与类型的组合,以及已插入
分片 中的数据 (字节流) 计算得出的。
replicated_deduplication_window_for_async_inserts
- 任意正整数。
- 0 (禁用 async_inserts 的去重)
replicated_deduplication_window_for_async_inserts 个块保存,最旧的哈希和会从 ClickHouse Keeper 中移除。
replicated_deduplication_window_for_async_inserts 的值越大,Async Inserts 就会越慢,因为需要比较更多条目。
哈希和是根据字段名称与类型的组合以及插入的数据 (字节流) 计算得出的。
replicated_deduplication_window_seconds
- 任意正整数。
replicated_deduplication_window_seconds 指定用于插入去重的块哈希值
应保留多长时间。早于
replicated_deduplication_window_seconds 的哈希值会从 ClickHouse Keeper 中移除,
即使它们的数量少于 replicated_deduplication_window。
这里的时间是相对于最新一条记录的时间,而不是相对于实际时钟
时间。如果这是唯一的一条记录,它将永久保留。
replicated_deduplication_window_seconds_for_async_inserts
- 任意正整数。
replicated_deduplication_window_seconds_for_async_inserts 指定用于异步插入去重的块哈希和
应保留多长时间。早于 replicated_deduplication_window_seconds_for_async_inserts 的哈希和
会从 ClickHouse Keeper 中移除,即使其数量少于
replicated_deduplication_window_for_async_inserts。
这里的时间是相对于最近一条记录的时间,而不是相对于实际时钟
时间。如果这是唯一的一条记录,则会永久保留。
replicated_fetches_http_connection_timeout
replicated_fetches_http_receive_timeout
replicated_fetches_http_send_timeout
replicated_fetches_min_part_level
replicated_fetches_min_part_level_timeout_seconds
replicated_fetches_min_part_level 的 分片 在超过该秒数后仍会被强制拉取。
使用 0 可禁用该超时 (低于最小级别的 分片s 将被无限期延后,直到被合并) 。
默认值:300 (5 分钟后强制拉取) 。
replicated_max_mutations_in_one_entry
replicated_max_parallel_fetches
replicated_max_parallel_fetches_for_host
replicated_max_parallel_fetches_for_table
replicated_max_parallel_sends
replicated_max_parallel_sends_for_table
replicated_max_ratio_of_wrong_parts
- Float,0.0 - 1.0
search_orphaned_parts_disks
- any - 不限制范围。
- local - 范围仅限本地磁盘。
- none - 空范围,不搜索
serialization_info_version
serialization.json 时使用的序列化信息版本。
此设置用于在集群升级期间保持兼容性。
可能的值:
basic- 基础格式。with_types- 包含额外types_serialization_versions字段的格式,支持按类型指定序列化版本。 这会使string_serialization_version等设置生效。
basic,这样新服务器生成的
数据分区片段可兼容旧服务器。升级完成后,
切换为 WITH_TYPES 以启用按类型的序列化版本。
启用时 (默认) ,名称中带点且共享相同前缀的 Array 列 (例如 n.a 和 n.b)
会被视为 Nested 结构的一部分:它们在磁盘上共享同一个 offsets 文件 (例如 n.size0) ,
并且在 INSERT 时会校验它们的数组大小是否一致。
禁用后,每个 Array 列都会拥有各自独立的 offset 文件,名称中的点不再具有特殊
语义,同时标量列也可以与共享相同前缀的点分 Array 列共存
(例如 n UInt32 与 n.a Array(String) 可同时存在) 。该设置在表创建后不可更改。
启用对协调合并任务的重新调度。即使在
shared_merge_tree_enable_coordinated_merges=0 时,这也可能很有用,因为它会填充合并协调器的
统计信息,并有助于冷启动。
启用在 ZooKeeper 中为每个副本创建 /metadata 和 /columns 节点。
仅在 ClickHouse Cloud 中可用
停止为 shared merge tree 分配合并和变更任务。仅在 ClickHouse
Cloud 中可用
分区在不包含任何 parts 时,会在 Keeper 中保留多少秒。
启用对空分区对应的 Keeper 条目的清理。
启用协调合并策略
启用在 Keeper 中向虚拟 parts 写入属性并提交块
启用过期parts检查。仅在 ClickHouse Cloud 中可用
shared merge tree 中在未由 ZooKeeper watch 触发的情况下进行 parts 更新的时间间隔 (秒) 。仅在 ClickHouse Cloud
中可用
parts 更新的初始退避时间。仅在 ClickHouse Cloud 中可用
服务器间 HTTP 连接的超时时间。仅在 ClickHouse Cloud 中可用
用于服务器间 HTTP 通信的超时时间。仅在 ClickHouse
Cloud 中可用
为避免惊群效应,向
shared_merge_tree_leader_update_period 额外添加一个从 0 到 x 秒均匀分布的值。仅在 ClickHouse Cloud
中可用
重新检查 parts 更新 leader 状态的最大周期。仅在
ClickHouse Cloud
中可用
leader 在一次 HTTP 请求中尝试确认可删除的过期分区片段的最大数量。仅在 ClickHouse Cloud 中可用。
parts 更新的最大退避时间。仅在 ClickHouse Cloud 中可用
parts 更新 leader 的最大数量。仅在 ClickHouse Cloud 中可用
parts 更新 leader 的数量上限。仅在 ClickHouse Cloud 中可用
参与删除 parts (killer 线程) 的最大副本数。仅在 ClickHouse Cloud 中可用
尝试分配可能存在冲突的合并任务的最大副本数 (可
避免在合并任务分配中产生冗余冲突) 。0 表示禁用。仅
在 ClickHouse Cloud 中可用
SMT 的损坏 parts 最大数量;若超过该值,则禁止自动 detach。
SMT 中所有损坏 parts 的最大总大小;若超过该值,将禁止自动 detach。
为避免在 insert 重试期间执行错误操作,insert memoization ID 会保留多长时间。仅在 ClickHouse Cloud 中可用
合并协调器 选举线程的运行间隔时间
协调器线程延迟的时间调整系数
合并协调器 与 ZooKeeper 同步以获取最新元数据的频率
协调器一次可向 MergerMutator 请求的合并数量
合并协调器线程两次运行之间的最大时间间隔
合并协调器应准备并分发给各个工作线程的 merge 条目数量。
设置为 ‘auto’ 时,该值等于单个副本允许的最大 merge 任务数乘以活跃副本数。
merge coordinator 线程两次运行的最小间隔时间
合并工作线程在立即操作后如需更新其状态时使用的超时时间
合并工作线程两次运行之间的间隔时间
指定在清理过期 parts 时,同一 rendezvous 哈希组中包含的副本数量。
仅在 ClickHouse Cloud 中可用。
当 <candidate partitions for mutations only (partitions that cannot be merged)>/<candidate partitions for mutations> 的比率高于该设置值时,会在 merge/mutate 选择任务中重新加载 merge 谓词。仅在 ClickHouse Cloud
中可用
一次调度的拉取 parts 元数据作业数量。仅在
ClickHouse Cloud
中可用
在不启动包含此 part 的新合并的情况下,保留本地已合并 part 的时间。
这会让其他副本有机会拉取该 part,并开始这次合并。
仅在 ClickHouse Cloud 中可用。
本地合并完成后,若 part 的大小 (按行数计) 达到此最小值,则会推迟为其分配下一次合并。仅在 ClickHouse Cloud 中可用。
在不启动包含该分片的新 merge 的情况下,本地已合并分片的保留时间。
这让其他副本有机会拉取该分片并启动这次 merge。
仅在 ClickHouse Cloud 中可用
在可能的情况下,从 leader 读取 virtual parts。仅在 ClickHouse
Cloud 中可用
副本在后台尝试更新副本集的频率。下一次运行的时间会在 [0, value] 秒范围内按均匀分布随机抖动。例外情况:value = 0 不遵循这一约定;实现中会强制使用最小 200 毫秒,因此下一次运行的时间会在 [0, 200] 毫秒范围内随机抖动。
如果启用,所有副本都会尝试从其他已存在这些数据的副本拉取 part 的内存数据 (如主键、分区信息等) 。
副本按后台调度尝试重新加载其标志的频率。
启用从其他副本的内存缓存中请求 FS 缓存提示。仅在 ClickHouse Cloud 中可用
对过期parts使用紧凑格式:可降低 Keeper 负载,并改进
过期parts的处理。仅在 ClickHouse Cloud 中可用
如果启用,parts 过多计数器将基于 Keeper 中的共享数据,而不是
本地副本状态。仅在 ClickHouse Cloud 中可用
如果启用,SharedMergeTree 将使用服务器级连接池中的一个 ZooKeeper 会话。
每个批次应打包多少个分区发现
simultaneous_parts_removal_limit
simultaneous_parts_removal_limit 个 parts。
将 simultaneous_parts_removal_limit 设置为 0 表示不受限制。
sleep_before_commit_local_part_in_replicated_table_ms
sleep_before_loading_outdated_parts_ms
storage_policy
string_serialization_version
String 列的序列化格式。
此设置仅在 serialization_info_version 设为 “with_types” 时生效。
设为 with_size_stream 时,顶层 String 列会通过单独的
.size 子列存储字符串长度,而不是内联存储。这样可以提供真正的 .size
子列,并提高压缩效率。
嵌套的 String 类型 (例如在 Nullable、LowCardinality、Array 或 Map 内部)
不受影响,但出现在 Tuple 中时除外。
可选值:
single_stream— 使用内联大小信息的标准序列化格式。with_size_stream— 对顶层String列使用单独的大小流。
table_disk
table_readonly
temporary_directories_lifetime
try_fetch_recompressed_part_timeout
- 任意正整数。
ttl_only_drop_parts
TTL 设置过期时,是否直接删除整个数据 part。
当 ttl_only_drop_parts 被禁用时 (默认) ,只会删除
那些根据其 TTL 设置已过期的行。
当 ttl_only_drop_parts 被启用时,如果某个数据 part 中的所有
行都根据其 TTL 设置过期,则会删除整个数据 part。
use_adaptive_write_buffer_for_dynamic_subcolumns
use_async_block_ids_cache
true,则会缓存异步插入的哈希和。
可能的值:
truefalse
use_compact_variant_discriminators_serialization
use_const_adaptive_granularity
use_metadata_cache
use_minimalistic_checksums_in_zookeeper
use_minimalistic_part_header_in_zookeeper
use_primary_key_cache
vertical_merge_algorithm_min_bytes_to_activate
vertical_merge_algorithm_min_columns_to_activate
vertical_merge_algorithm_min_rows_to_activate
vertical_merge_optimize_lightweight_delete
vertical_merge_optimize_ttl_delete
vertical_merge_remote_filesystem_prefetch
wait_for_unique_parts_send_before_shutdown_ms
write_ahead_log_bytes_to_fsync
write_ahead_log_interval_ms_to_fsync
write_ahead_log_max_bytes
write_final_mark
write_marks_for_substreams_in_compact_parts
t Tuple(a String, b UInt32, c Array(Nullable(UInt32))) 会被序列化为以下子流:
t.a:元组元素a的 String 数据t.b:元组元素b的 UInt32 数据t.c.size0:元组元素c的数组大小t.c.null:元组元素c中嵌套数组元素的 null mapt.c:元组元素c中嵌套数组元素的 UInt32 数据
t.c,则只会读取
子流 t.c.size0、t.c.null 和 t.c 的数据,而不会读取子流 t.a 和 t.b 的数据。禁用此设置时,
只会为顶层列 t 写入一个标记,这意味着即使只需要某些子流的数据,也始终会从粒度中读取整列数据。
zero_copy_concurrent_part_removal_max_postpone_ratio
zero_copy_concurrent_part_removal_max_split_times
zero_copy_merge_mutation_min_parts_size_sleep_before_lock
zero_copy_merge_mutation_min_parts_size_sleep_no_scale_before_lock
zookeeper_session_expiration_check_period
- 任意正整数。