MergeTree 表设置
系统表 system.merge_tree_settings 显示全局设置的 MergeTree 设置。
可以在服务器配置文件中的 merge_tree 部分设置 MergeTree 设置,也可以在 CREATE TABLE 语句的 SETTINGS 子句中为每个 MergeTree 表单独指定。
自定义设置 max_suspicious_broken_parts 的示例
在服务器配置文件中配置所有 MergeTree 表的默认值
为特定表设置
使用 ALTER TABLE ... MODIFY SETTING 更改特定表的设置
MergeTree 设置
adaptive_write_buffer_initial_size
自适应写缓冲区的初始大小
add_implicit_sign_column_constraint_for_collapsing_engine
如果为 true,则为 CollapsingMergeTree 或 VersionedCollapsingMergeTree 表的 sign 列添加隐式约束,以仅允许有效值(1 和 -1)。
add_minmax_index_for_numeric_columns
启用后,将为表的全部数值列添加最小-最大(跳过)索引。
add_minmax_index_for_string_columns
启用后,将为表的全部字符串列添加最小-最大(跳过)索引。
add_minmax_index_for_temporal_columns
启用后,将为表的全部 Date、Date32、Time、Time64、DateTime 和 DateTime64 列添加最小-最大(跳过)索引
allow_coalescing_columns_in_partition_or_order_key
启用后,允许在 CoalescingMergeTree 表的分区或排序键中使用合并列。
allow_experimental_replacing_merge_with_cleanup
允许对带有 is_deleted 列的 ReplacingMergeTree 进行实验性 CLEANUP 合并。启用后,允许使用 OPTIMIZE ... FINAL CLEANUP 手动将分区中的所有部分合并为一个部分,并删除任何已删除的行。
还允许使用设置 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
启用 MergeTree 排序键中的降序排序支持。此设置对于时间序列分析和 Top-N 查询特别有用,允许按相反的顺序存储数据以优化查询性能。
启用 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
允许将 Nullable 类型作为主键。
allow_part_offset_column_in_projections
允许在投影选择查询中使用 '_part_offset' 列。
allow_reduce_blocking_parts_task
后台任务,用于减少共享 MergeTree 表的阻塞部分。仅在 ClickHouse Cloud 中
allow_remote_fs_zero_copy_replication
请勿在生产环境中使用此设置,因为它尚未准备好。
allow_summing_columns_in_partition_or_order_key
启用后,允许在 SummingMergeTree 表的分区或排序键中使用求和列。
allow_suspicious_indices
拒绝具有相同表达式的主索引/辅助索引和排序键
allow_vertical_merges_from_compact_to_wide_parts
允许从紧凑到宽部分的垂直合并。此设置必须在所有副本上具有相同的值。
alter_column_secondary_index_mode
配置是否允许修改受辅助索引覆盖的列的 ALTER 命令,以及如果允许则采取什么操作。默认情况下,此类 ALTER 命令是允许的,并且索引将被重建。
可能的值
rebuild(默认):重建ALTER命令中受影响的任何辅助索引。throw:通过抛出异常来阻止对受显式辅助索引覆盖的列的任何ALTER。 隐式索引不在此限制范围内,将被重建。drop:删除依赖的辅助索引。 新的部分将没有索引,需要MATERIALIZE INDEX才能重新创建它们。compatibility:匹配原始行为:在ALTER ... MODIFY COLUMN上抛出异常,并在ALTER ... UPDATE/DELETE上重建。ignore:仅供专家使用。 它会将索引置于不一致的状态,从而导致不正确的查询结果。
always_fetch_merged_part
如果为 true,则此副本永远不会合并部分,而是始终从其他副本下载合并的部分。
可能的值
- true, false
always_use_copy_instead_of_hardlinks
在变异/替换/分离等操作期间始终复制数据而不是使用硬链接。
apply_patches_on_merge
如果为 true,则在合并时应用补丁部分
assign_part_uuids
启用后,将为每个新部分分配唯一的部件标识符。 在启用之前,请检查所有副本是否支持 UUID 版本 4。
async_block_ids_cache_update_wait_ms
每个插入迭代将等待 async_block_ids_cache 更新多长时间
async_insert
如果为 true,则 INSERT 查询中的数据存储在队列中,稍后在后台刷新到表中。
auto_statistics_types
逗号分隔的列表,用于在所有合适的列上自动计算统计信息类型。 支持的统计信息类型:tdigest、countmin、minmax、uniq。
background_task_preferred_step_execution_time_ms
合并或变异的一个步骤的预期执行时间。 如果一个步骤花费的时间更长,则可能会超出此限制
cache_populated_by_fetch
此设置仅适用于 ClickHouse Cloud。
在禁用 cache_populated_by_fetch(默认设置)的情况下,只有在运行需要这些部分查询时,新的数据部分才会加载到文件系统缓存中。
如果启用,cache_populated_by_fetch 将导致所有节点从存储加载新的数据部分到其文件系统缓存中,而无需查询来触发此操作。
参见
cache_populated_by_fetch_filename_regexp
此设置仅适用于 ClickHouse Cloud。
如果非空,则只有匹配此正则表达式的文件在 fetch 后会被预热到缓存中(如果启用了 cache_populated_by_fetch)。
check_delay_period
已弃用的设置,不起作用。
check_sample_column_is_correct
在表创建时启用检查,以确保用于采样或采样表达式的列的数据类型是否正确。 数据类型必须是无符号 整数类型之一:UInt8、UInt16、UInt32、UInt64。
可能的值
true— 启用检查。false— 在表创建时禁用检查。
默认值:true。
默认情况下,ClickHouse 服务器在表创建时会检查用于采样或采样表达式的列的数据类型。 如果您已经拥有具有不正确采样表达式的表,并且不希望服务器在启动时引发异常,请将 check_sample_column_is_correct 设置为 false。
clean_deleted_rows
已弃用的设置,不起作用。
cleanup_delay_period
清理旧队列日志、块哈希和部分的最短周期。
cleanup_delay_period_random_add
添加从 0 到 x 秒的均匀分布值到 cleanup_delay_period,以避免雷群效应和随之而来的 ZooKeeper DoS,以防有大量表。
cleanup_thread_preferred_points_per_iteration
后台清理的首选批处理大小(点是抽象的,但 1 个点大约相当于 1 个插入的块)。
cleanup_threads
已弃用的设置,不起作用。
clone_replica_zookeeper_create_get_part_batch_size
克隆副本时,ZooKeeper multi-create get-part 请求的批处理大小。
columns_and_secondary_indices_sizes_lazy_calculation
在表初始化时,延迟到第一次请求时计算列和二级索引的大小。
columns_to_prewarm_mark_cache
用于预热标记缓存的列列表(如果启用)。为空表示所有列
compact_parts_max_bytes_to_buffer
仅在 ClickHouse Cloud 中可用。在压缩部分中,单次条带中写入的最大字节数
compact_parts_max_granules_to_buffer
仅在 ClickHouse Cloud 中可用。在压缩部分中,单次条带中写入的最大颗粒数
compact_parts_merge_max_bytes_to_prefetch_part
仅在 ClickHouse Cloud 中可用。在合并期间,将压缩部分作为一个整体读取到内存中的最大大小。
compatibility_allow_sampling_expression_not_in_primary_key
允许创建采样表达式不在主键中的表。这仅需要在临时允许使用错误表来保持向后兼容。
compress_marks
支持压缩标记,减少标记文件大小并加快网络传输。
compress_primary_key
支持压缩主键,减少主键文件大小并加快网络传输。
concurrent_part_removal_threshold
仅当非活动数据部分数量至少为该值时,才激活并发部分删除(参见 'max_part_removal_threads')。
deduplicate_merge_projection_mode
是否允许为非经典 MergeTree 表(即非 (Replicated, Shared) MergeTree)创建投影。忽略选项纯粹是为了兼容性,可能会导致不正确的结果。否则,如果允许,合并投影时的操作是删除还是重建。因此,经典的 MergeTree 会忽略此设置。它也控制 OPTIMIZE DEDUPLICATE,但对所有 MergeTree 系列成员都有影响。类似于 lightweight_mutation_projection_mode 选项,它也是分层级的。
可能的值
ignorethrowdroprebuild
default_compression_codec
指定要在表声明中未为特定列定义压缩编解码器时使用的默认压缩编解码器。列的压缩编解码器选择顺序
- 表声明中为该列定义的压缩编解码器
- 在
default_compression_codec(此设置)中定义的压缩编解码器 - 在
compression设置中定义的默认压缩编解码器。默认值:空字符串(未定义)。
detach_not_byte_identical_parts
在合并或变异后,如果副本上的数据部分与其他副本上的数据部分不完全相同,则启用或禁用分离数据部分。如果禁用,则删除该数据部分。如果希望以后分析这些部分,请激活此设置。
该设置适用于启用了 数据复制 的 MergeTree 表。
可能的值
0— 删除部分。1— 分离部分。
detach_old_local_parts_when_cloning_replica
修复丢失的副本时,不要删除旧的本地部分。
可能的值
truefalse
disable_detach_partition_for_zero_copy_replication
禁用零拷贝复制的 DETACH PARTITION 查询。
disable_fetch_partition_for_zero_copy_replication
禁用零拷贝复制的 FETCH PARTITION 查询。
disable_freeze_partition_for_zero_copy_replication
禁用零拷贝复制的 FREEZE PARTITION 查询。
disk
存储磁盘的名称。可以代替存储策略指定。
distributed_index_analysis_min_indexes_bytes_to_activate
磁盘上(但未压缩)的最小索引大小(数据跳过和主键)以激活分布式索引分析
distributed_index_analysis_min_parts_to_activate
激活分布式索引分析的最小部分数
dynamic_serialization_version
Dynamic 数据类型的序列化版本。需要用于兼容性。
可能的值
v1v2v3
enable_block_number_column
启用为每一行持久化列 _block_number。
enable_block_offset_column
在合并时持久化虚拟列 _block_number。
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 设置在从具有大行(数十和数百兆字节)的表选择数据时,可以提高 ClickHouse 的性能。如果具有大行的表,可以为这些表启用此设置以提高 SELECT 查询的效率。
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge
是否在合并分区为单个部分时使用 CLEANUP 合并用于 ReplacingMergeTree。需要启用 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
为复制的 MergeTree 表启用带有 ZooKeeper 名称前缀的端点 ID。
enable_vertical_merge_algorithm
启用垂直合并算法的使用。
enforce_index_structure_match_on_partition_manipulation
如果此设置针对分区操作查询(ATTACH/MOVE/REPLACE PARTITION)的目标表启用,则源表和目标表之间的索引和投影必须相同。否则,目标表可以拥有源表的索引和投影的超集。
escape_index_filenames
在 26.1 之前,我们没有转义为二级索引创建的文件名中的特殊符号,这可能导致某些字符在索引名称中产生损坏的部分。这纯粹是为了兼容性原因。除非您正在读取使用非 ASCII 字符在名称中索引的旧部分,否则不应更改它。
escape_variant_subcolumn_filenames
转义为 Variant 数据类型的子列在 MergeTree 表的 Wide 部分中创建的文件名中的特殊符号。需要用于兼容性。
exclude_deleted_rows_for_part_size_in_merge
如果启用,估计的数据部分实际大小(即排除通过 DELETE FROM 删除的那些行)将在选择要合并的部分时使用。请注意,此行为仅由在启用此设置后受 DELETE FROM 影响的数据部分触发。
可能的值
truefalse
参见
exclude_materialize_skip_indexes_on_merge
排除提供的逗号分隔的跳过索引列表,使其在合并期间不被构建和存储。如果 materialize_skip_indexes_on_merge 为 false,则无效。
被排除的跳跃索引仍然会被构建和存储,通过显式的 MATERIALIZE INDEX 查询或在 INSERT 期间,具体取决于 materialize_skip_indexes_on_insert 会话设置。
示例
execute_merges_on_single_replica_time_threshold
当此设置的值大于零时,只有单个副本会立即开始合并,而其他副本会等待最多该时间量来下载结果,而不是在本地执行合并。如果选定的副本在指定时间内未能完成合并,则回退到标准行为。
可能的值
- 任何正整数。
fault_probability_after_part_commit
用于测试。请勿更改它。
fault_probability_before_part_commit
用于测试。请勿更改它。
finished_mutations_to_keep
要保留的已完成变异记录的数量。如果为零,则保留所有记录。
force_read_through_cache_for_merges
强制通过文件系统缓存读取合并数据
fsync_after_insert
对每个插入的部分执行 fsync。会显著降低插入性能,不建议与宽部分一起使用。
fsync_part_directory
在所有部分操作(写入、重命名等)之后对部分目录执行 fsync。
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 将中断并显示以下错误
“非活动部分过多 (N)。部分清理正在显著慢于插入”异常。
可能的值
- 任何正整数。
index_granularity
索引标记之间的数据行最大数量。即,有多少行对应于一个主键值。
index_granularity_bytes
字节为单位的数据粒度最大大小。
要仅通过行数限制粒度大小,请设置为 0(不推荐)。
initialization_retry_period
表初始化重试周期,以秒为单位。
kill_delay_period
已弃用的设置,不起作用。
kill_delay_period_random_add
已弃用的设置,不起作用。
kill_threads
已弃用的设置,不起作用。
lightweight_mutation_projection_mode
默认情况下,轻量级删除 DELETE 不适用于带有投影的表。这是因为投影中的行可能受到 DELETE 操作的影响。因此默认值为 throw。但是,此选项可以更改行为。如果值为 drop 或 rebuild,则删除将适用于投影。drop 会删除投影,因此当前查询可能很快,但未来的查询会很慢,因为没有附加投影。rebuild 会重建投影,这可能会影响当前查询的性能,但可能会加快未来查询的速度。好的一点是,这些选项仅在部分级别起作用,这意味着未受影响的部分中的投影将保持不变,而不会触发任何操作,例如删除或重建。
可能的值
throwdroprebuild
load_existing_rows_count_for_old_parts
如果启用并与 exclude_deleted_rows_for_part_size_in_merge 设置一起使用,则在表启动时将计算现有数据部分的已删除行数。请注意,这可能会减慢表加载的启动速度。
可能的值
truefalse
参见
lock_acquire_timeout_for_background_operations
对于合并、变异等后台操作,在获取表锁失败之前多少秒。
marks_compress_block_size
标记压缩块大小,实际压缩块的大小。
marks_compression_codec
标记使用的压缩编码,标记足够小且已缓存,因此默认压缩为 ZSTD(3)。
materialize_skip_indexes_on_merge
启用时,合并会构建和存储新部分的跳跃索引。否则,它们可以通过显式的 MATERIALIZE INDEX 或 INSERT 期间 创建/存储。
有关更细粒度的控制,请参阅 exclude_materialize_skip_indexes_on_merge。
materialize_statistics_on_merge
启用时,合并将构建和存储新部分的统计信息。否则,它们可以通过显式的 MATERIALIZE STATISTICS 或 INSERT 期间 创建/存储
materialize_ttl_recalculate_only
仅在 MATERIALIZE TTL 时重新计算 ttl 信息
max_avg_part_size_for_too_many_parts
根据“parts_to_delay_insert”和“parts_to_throw_insert”的“太多部分”检查仅在相关分区中的平均部分大小不大于指定阈值时才有效。如果大于指定阈值,则 INSERT 不会被延迟或拒绝。这允许在单个服务器上的单个表中拥有数百 TB 的数据,如果部分成功合并为更大的部分。这不会影响非活动部分或总部分的阈值。
max_bytes_to_merge_at_max_space_in_pool
如果资源足够,合并成一个部分的最大总部分大小(以字节为单位)。大致对应于自动后台合并创建的最大可能部分大小。(0 表示合并将被禁用)
可能的值
- 任何非负整数。
合并调度程序会定期分析分区中部分的大小和数量,如果池中有足够的可用资源,则启动后台合并。合并会持续进行,直到源部分的总大小大于 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 定义了即使缺乏可用磁盘空间(在池中),也可以合并的部分的最大总大小。这对于减少小部分数量和减少“部分过多”错误的几率是必要的。合并会通过加倍合并部分的总大小来预留磁盘空间。因此,在少量可用磁盘空间的情况下,可能会发生以下情况:存在可用空间,但该空间已被正在进行的大规模合并预留,因此其他合并无法启动,并且每次插入时小部分的数量都会增加。
max_cleanup_delay_period
清理旧队列日志、块哈希和部分的最大周期。
max_compress_block_size
在写入表之前压缩未压缩数据块的最大大小。您还可以在全局设置中指定此设置(请参阅 max_compress_block_size 设置)。在创建表时指定的数值会覆盖此设置的全局数值。
max_concurrent_queries
与 MergeTree 表相关的并发执行查询的最大数量。查询仍然会受到其他 max_concurrent_queries 设置的限制。
可能的值
- 正整数。
0— 无限制。
默认值:0(无限制)。
示例
max_delay_to_insert
用于计算 INSERT 延迟的秒数,如果单个分区中的活动片段数量超过 parts_to_delay_insert 值。
可能的值
- 任何正整数。
INSERT 的延迟(以毫秒为单位)通过以下公式计算
例如,如果一个分区有 299 个活动片段,并且 parts_to_throw_insert = 300,parts_to_delay_insert = 150,max_delay_to_insert = 1,则 INSERT 将延迟 pow( 1 * 1000, (1 + 299 - 150) / (300 - 150) ) = 1000 毫秒。
从版本 23.1 开始,公式已更改为
例如,如果一个分区有 224 个活动片段,并且 parts_to_throw_insert = 300,parts_to_delay_insert = 150,max_delay_to_insert = 1,min_delay_to_insert_ms = 10,则 INSERT 将延迟 max( 10, 1 * 1000 * (224 - 150 + 1) / (300 - 150) ) = 500 毫秒。
max_delay_to_mutate_ms
如果存在大量未完成的 mutations,MergeTree 表进行 mutations 的最大延迟(以毫秒为单位)。
max_digestion_size_per_segment
已弃用的设置,不起作用。
max_file_name_length
保持文件名不变而不进行哈希处理的最大长度。仅当启用 replace_long_file_name_to_hash 设置时生效。此设置的值不包括文件扩展名的长度。因此,建议将其设置为低于最大文件名长度(通常为 255 字节)并留有一定间隙,以避免文件系统错误。
max_files_to_modify_in_alter_columns
如果需要修改(删除、添加)的文件数量大于此设置,则不应用 ALTER。
可能的值
- 任何正整数。
默认值:75
max_files_to_remove_in_alter_columns
如果需要删除的文件数量大于此设置,则不应用 ALTER。
可能的值
- 任何正整数。
max_merge_delayed_streams_for_parallel_write
可以并行刷新(类似于 max_insert_delayed_streams_for_parallel_write 用于插入)的流(列)的最大数量。仅适用于垂直合并。
max_merge_selecting_sleep_ms
在没有选择任何片段后,再次尝试选择要合并的片段之前,等待的最大时间。较低的设置将频繁地触发 background_schedule_pool 中的选择任务,从而导致大型集群中大量请求到 ZooKeeper。
max_number_of_merges_with_ttl_in_pool
当池中带有 TTL 条目的合并数量超过指定数量时,不要分配新的带有 TTL 的合并。这是为了释放线程以进行常规合并,并避免“太多片段”的情况。
max_number_of_mutations_for_replica
将每个副本的片段 mutations 数量限制为指定数量。零表示对每个副本的 mutations 数量没有限制(执行仍然可能受到其他设置的约束)。
max_part_loading_threads
已弃用的设置,不起作用。
max_part_removal_threads
已弃用的设置,不起作用。
max_partitions_to_read
限制单个查询可以访问的最大分区数。
表创建时指定的设置可以通过查询级别设置覆盖。
可能的值
- 任何正整数。
您还可以在查询/会话/配置文件级别指定查询复杂性设置 max_partitions_to_read。
max_parts_in_total
如果表所有分区中的活动片段总数超过 max_parts_in_total 值,则 INSERT 将被中断,并显示 Too many parts (N) 异常。
可能的值
- 任何正整数。
表中大量的片段会降低 ClickHouse 查询的性能并增加 ClickHouse 启动时间。通常这是由于设计不当(分区策略选择错误 - 分区太小)造成的。
max_parts_to_merge_at_once
一次可以合并的最大片段数量(0 - 禁用)。不影响 OPTIMIZE FINAL 查询。
max_postpone_time_for_failed_mutations_ms
失败的 mutations 的最大推迟时间。
max_postpone_time_for_failed_replicated_fetches_ms
失败的复制 fetches 的最大推迟时间。
max_postpone_time_for_failed_replicated_merges_ms
失败的复制 merges 的最大推迟时间。
max_postpone_time_for_failed_replicated_tasks_ms
失败的复制任务的最大推迟时间。如果任务不是 fetch、merge 或 mutation,则使用此值。
max_projections
Merge Tree projections 的最大数量。
max_replicated_fetches_network_bandwidth
限制 复制 fetches 的网络数据交换的最大速度,以字节/秒为单位。此设置应用于特定的表,与应用于服务器的 max_replicated_fetches_network_bandwidth_for_server 设置不同。
您可以限制服务器网络和特定表的网络,但为此,表级别设置的值应小于服务器级别设置。否则,服务器仅考虑 max_replicated_fetches_network_bandwidth_for_server 设置。
该设置并非完全准确地遵循。
可能的值
- 正整数。
0— 无限制。
默认值:0。
用法
可用于限制在添加或替换新节点时复制数据的速度。
max_replicated_logs_to_keep
如果 ClickHouse Keeper 日志中存在非活动副本,则允许的最大记录数。非活动副本在数量超过此值时变为丢失。
可能的值
- 任何正整数。
max_replicated_merges_in_queue
ReplicatedMergeTree 队列中同时允许的合并和 mutations 任务数量。
max_replicated_merges_with_ttl_in_queue
ReplicatedMergeTree 队列中同时允许的带有 TTL 的合并任务数量。
max_replicated_mutations_in_queue
ReplicatedMergeTree 队列中同时允许的 mutations 任务数量。
max_replicated_sends_network_bandwidth
限制 复制 sends 的网络数据交换的最大速度,以字节/秒为单位。此设置应用于特定的表,与应用于服务器的 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
补丁片段中未压缩数据的最大大小(以字节为单位)。如果所有补丁片段中的数据量超过此值,则将拒绝轻量级更新。0 - 无限制。
merge_max_block_size
合并时从合并部分读取到内存中的行数。
可能的值
- 任何正整数。
合并会以 merge_max_block_size 行的块从部分读取行,然后合并并将结果写入新的部分。读取的块被放置在 RAM 中,因此 merge_max_block_size 影响合并所需的 RAM 大小。因此,合并可能会消耗大量 RAM 用于具有非常宽行的表(如果平均行大小为 100kb,则合并 10 个部分时,(100kb * 10 * 8192) = ~ 8GB 的 RAM)。通过减小 merge_max_block_size,可以减少合并所需的 RAM 量,但会降低合并速度。
merge_max_block_size_bytes
合并操作应形成的块的大小(字节数)。默认值与 index_granularity_bytes 相同。
merge_max_bytes_to_prewarm_cache
仅在 ClickHouse Cloud 中可用。合并期间预热缓存的最大部分大小(压缩或打包)。
merge_max_dynamic_subcolumns_in_compact_part
合并后,Compact 数据部分中每个列可以创建的最大动态子列数。它允许控制 Compact 部分中的动态子列数,而与数据类型中指定的动态参数无关。
例如,如果表具有一个类型为 JSON(max_dynamic_paths=1024) 的列,并且设置 merge_max_dynamic_subcolumns_in_compact_part 设置为 128,则合并到 Compact 数据部分后,此部分中的动态路径数将减少到 128,并且只有 128 个路径将被写入作为动态子列。
merge_max_dynamic_subcolumns_in_wide_part
合并后,Wide 数据部分中每个列可以创建的最大动态子列数。它允许减少 Wide 数据部分中创建的文件数,而与数据类型中指定的动态参数无关。
例如,如果表具有一个类型为 JSON(max_dynamic_paths=1024) 的列,并且设置 merge_max_dynamic_subcolumns_in_wide_part 设置为 128,则合并到 Wide 数据部分后,此部分中的动态路径数将减少到 128,并且只有 128 个路径将被写入作为动态子列。
merge_selecting_sleep_ms
在没有选择任何部分进行合并后,再次尝试选择合并部分之前,最小的等待时间(毫秒)。较低的设置将频繁地触发 background_schedule_pool 中的选择任务,从而导致大型集群中大量请求到 zookeeper。
merge_selecting_sleep_slowdown_factor
如果未分配合并,则合并选择任务的睡眠时间乘以此因子;如果分配了合并,则除以此因子。
merge_selector_algorithm
选择用于合并分配的部分的算法。
merge_selector_base
影响分配的合并的写入放大倍数(专家级设置,如果您不了解其作用,请不要更改)。适用于 Simple 和 StochasticSimple 合并选择器。
merge_selector_blurry_base_scale_factor
控制逻辑相对于分区中部分数量何时生效。因子越大,反应越迟钝。
merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_once
为简单合并选择器启用启发式方法,该方法将降低合并选择的上限。通过这样做,并发合并的数量会增加,这有助于解决 TOO_MANY_PARTS 错误,但同时也会增加写入放大倍数。
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
仅在 ClickHouse Cloud 中可用。合并期间预热缓存的最大部分大小总计。
merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds
已弃用的设置,不起作用。
merge_tree_clear_old_parts_interval_seconds
设置 ClickHouse 执行旧部分、WAL 和变异的清理间隔(秒)。
可能的值
- 任何正整数。
merge_tree_clear_old_temporary_directories_interval_seconds
设置 ClickHouse 执行旧临时目录清理的间隔(秒)。
可能的值
- 任何正整数。
merge_tree_enable_clear_old_broken_detached
已弃用的设置,不起作用。
merge_with_recompression_ttl_timeout
重复具有重新压缩 TTL 的合并之前的最小延迟(秒)。
merge_with_ttl_timeout
重复具有删除 TTL 的合并之前的最小延迟(秒)。
merge_workload
用于调节资源如何在合并和其他工作负载之间利用和共享。指定的值用作此表的后台合并的 workload 设置值。如果未指定(空字符串),则使用服务器设置 merge_workload 代替。
参见
min_absolute_delay_to_close
关闭、停止服务请求以及在状态检查期间不返回 Ok 的最小绝对延迟。
min_age_to_force_merge_on_partition_only
是否应仅将 min_age_to_force_merge_seconds 应用于整个分区,而不应用于子集。
默认情况下,忽略设置 max_bytes_to_merge_at_max_space_in_pool(请参阅 max_bytes_to_merge_at_max_space_in_pool 设置)。
可能的值
- true, false
min_age_to_force_merge_seconds
如果范围内的每个部分都早于 min_age_to_force_merge_seconds 的值,则合并部分。
默认情况下,忽略设置 max_bytes_to_merge_at_max_space_in_pool(请参阅 max_bytes_to_merge_at_max_space_in_pool 设置)。
可能的值
- 正整数。
min_bytes_for_compact_part
已弃用的设置,不起作用。
min_bytes_for_full_part_storage
仅在 ClickHouse Cloud 中可用。使用完整存储类型而不是打包存储数据的最小未压缩大小(字节)。
min_bytes_for_wide_part
可以存储在 Wide 格式中的数据部分的最小字节/行数。您可以设置一个、两个或不设置这些设置。
min_bytes_to_prewarm_caches
预热标记缓存和主索引缓存以获取新部分的最小大小(未压缩字节)。
min_bytes_to_rebalance_partition_over_jbod
设置在卷磁盘 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_compress_block_size 设置)。在创建表时指定的该值会覆盖此设置的全局值。
min_compressed_bytes_to_fsync_after_fetch
在获取部分后,fsync 部分的最小压缩字节数(0 - 禁用)。
min_compressed_bytes_to_fsync_after_merge
在合并部分后,fsync 部分的最小压缩字节数(0 - 禁用)。
min_delay_to_insert_ms
如果单个分区中有大量未合并的部分,则将数据插入 MergeTree 表的最小延迟(毫秒)。
min_delay_to_mutate_ms
如果存在大量未完成的变异,则变异 MergeTree 表的最小延迟(毫秒)。
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操作将写入的数据量。 - 仅当指定了正数(非零)比例时才进行检查
可能的值
- 浮点数,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
仅在 ClickHouse Cloud 中可用。用于数据部分存储的最小层级,以使用完整类型存储而不是压缩存储
min_level_for_wide_part
创建 Wide 格式数据部分的最小层级,而不是 Compact 格式。
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_parts_to_merge_at_once
合并选择器一次可以挑选合并的最小数据部分数量(专家级设置,如果您不了解其作用,请不要更改)。0 - 禁用。适用于 Simple 和 StochasticSimple 合并选择器。
min_relative_delay_to_close
相对于其他副本的最小延迟,用于关闭、停止服务请求以及在状态检查期间不返回 Ok。
min_relative_delay_to_measure
仅当绝对延迟不小于此值时,才计算相对副本延迟。
min_relative_delay_to_yield_leadership
已弃用的设置,不起作用。
min_replicated_logs_to_keep
即使它们已过时,也要在 ZooKeeper 日志中保留大约这个数量的最新记录。这不会影响表的运行:仅用于在清理之前诊断 ZooKeeper 日志。
可能的值
- 任何正整数。
min_rows_for_compact_part
已弃用的设置,不起作用。
min_rows_for_full_part_storage
仅在 ClickHouse Cloud 中可用。用于数据部分存储的最小行数,以使用完整类型存储而不是压缩存储
min_rows_for_wide_part
创建 Wide 格式数据部分的最小行数,而不是 Compact 格式。
min_rows_to_fsync_after_merge
合并后部分执行 fsync 的最小行数 (0 - 禁用)
mutation_workload
用于调节资源如何在变异和其它工作负载之间使用和共享。指定的值用作此表的后台变异的 workload 设置值。如果未指定(空字符串),则使用服务器设置 mutation_workload 代替。
参见
non_replicated_deduplication_window
非复制 MergeTree 表中,用于检查重复项的最近插入块的数量。
可能的值
- 任何正整数。
0(禁用去重)。
使用一种去重机制,类似于复制表(参见 replicated_deduplication_window 设置)。创建部分的哈希总和写入磁盘上的本地文件。
notify_newest_block_number
向 SharedJoin 或 SharedSet 通知最新的块编号。仅在 ClickHouse Cloud 中可用。
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 时生成此任务)。这是为了为常规合并留下空闲线程并避免“太多部分”。
可能的值
- 正整数。
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
如果表至少有那么多未完成的变异,则人为地减慢表的变异速度。设置为 0 时禁用
number_of_mutations_to_throw
如果表至少有那么多未完成的变异,则抛出“太多变异”异常。设置为 0 时禁用
number_of_partitions_to_consider_for_merge
仅在 ClickHouse Cloud 中可用。我们将考虑合并的最多 N 个分区。分区以随机加权方式选择,权重是可以在此分区中合并的数据部分数量。
object_serialization_version
JSON 数据类型的序列化版本。需要为了兼容性。
可能的值
v1v2v3
只有版本 v3 支持更改共享数据序列化版本。
object_shared_data_buckets_for_compact_part
Compact 部分中 JSON 共享数据序列化的桶数。适用于 map_with_buckets 和 advanced 共享数据序列化。
object_shared_data_buckets_for_wide_part
Wide 部分中 JSON 共享数据序列化的桶数。适用于 map_with_buckets 和 advanced 共享数据序列化。
object_shared_data_serialization_version
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 确定。
object_shared_data_serialization_version_for_zero_level_parts
此设置允许为插入期间创建的零级部件内的共享数据指定不同的序列化版本。不建议为零级部件使用advanced共享数据序列化,因为它会显著增加插入时间。
old_parts_lifetime
存储非活动部件的时间(以秒为单位),以防止服务器自发重启期间数据丢失。
可能的值
- 任何正整数。
在将多个部件合并为一个新部件后,ClickHouse 会将原始部件标记为非活动状态,并且仅在 old_parts_lifetime 秒后删除它们。如果当前查询未使用非活动部件(即部件的 refcount 为 1),则会删除非活动部件。
fsync 不会为新部件调用,因此在一段时间内,新部件仅存在于服务器的 RAM(操作系统缓存)中。如果服务器自发重启,新部件可能会丢失或损坏。为了保护数据,非活动部件不会立即删除。
在启动期间,ClickHouse 会检查部件的完整性。如果合并的部件已损坏,ClickHouse 会将非活动部件返回到活动列表,并稍后再次合并它们。然后,损坏的部件将被重命名(添加 broken_ 前缀)并移动到 detached 文件夹。如果合并的部件未损坏,则原始非活动部件将被重命名(添加 ignored_ 前缀)并移动到 detached 文件夹。
默认的 dirty_expire_centisecs 值(Linux 内核设置)为 30 秒(写入数据仅存储在 RAM 中的最大时间),但在磁盘系统负载较高的情况下,数据可能会稍后写入。通过实验,为 old_parts_lifetime 选择了 480 秒的值,在此期间,保证将新部件写入磁盘。
optimize_row_order
控制在插入期间是否应优化行顺序,以提高新插入表部件的可压缩性。
仅对普通的 MergeTree 引擎表有效。对专门的 MergeTree 引擎表(例如 CollapsingMergeTree)不起作用。
MergeTree 表(可选)使用 压缩编解码器 进行压缩。通用压缩编解码器,例如 LZ4 和 ZSTD,如果数据显示出模式,则可以实现最大的压缩率。相同值的长序列通常可以很好地压缩。
如果启用此设置,ClickHouse 会尝试以一种最小化新表部件的列中相等值运行次数的行顺序存储新插入的部件中的数据。换句话说,少量相等值运行意味着单个运行很长并且可以很好地压缩。
找到最佳行顺序在计算上是不可行的(NP 难题)。因此,ClickHouse 使用启发式方法来快速找到仍然可以提高压缩率的行顺序,而无需使用原始行顺序。
寻找行顺序的启发式方法
通常可以自由地对表(或表部件)的行进行洗牌,因为 SQL 认为在不同的行顺序下相同的表(表部件)是等效的。
当为表定义主键时,这种洗牌行的自由度受到限制。在 ClickHouse 中,主键 C1, C2, ..., CN 强制表行按列 C1、C2、... Cn 排序(聚簇索引)。因此,只能在行的“等价类”内对行进行洗牌,即在主键列中具有相同值的行。直观地说,具有高基数的键,例如涉及 DateTime64 时间戳列的主键,会导致许多小的等价类。同样,具有低基数主键的表会创建少量且大的等价类。没有主键的表代表跨所有行的单个等价类的极端情况。
等价类越少且越大,重新洗牌行时的自由度就越高。
D. Lemire、O. Kaser 在 Reordering columns for smaller indexes 中提出的启发式方法用于在每个等价类中找到最佳行顺序,该方法基于按非主键列的升序基数对每个等价类中的行进行排序。
它执行三个步骤
- 基于主键列中的行值找到所有等价类。
- 对于每个等价类,计算(通常是估计)非主键列的基数。
- 对于每个等价类,按升序非主键列基数对行进行排序。
如果启用,插入操作会产生额外的 CPU 成本来分析和优化新数据的行顺序。预计 INSERT 操作需要 30-50% 更长的时间,具体取决于数据特征。LZ4 或 ZSTD 的压缩率平均提高 20-40%。
此设置最适用于没有主键或低基数主键的表,即只有少量不同主键值的表。预计具有高基数主键的表,例如涉及 DateTime64 类型的时间戳列,将无法从此设置中受益。
part_moves_between_shards_delay_seconds
在分片之间移动部件之前/之后等待的时间。
part_moves_between_shards_enable
用于在分片之间移动部件的实验性/不完整功能。不考虑分片表达式。
parts_to_delay_insert
如果单个分区中的活动部件数量超过 parts_to_delay_insert 值,则会人为地减慢 INSERT 的速度。
可能的值
- 任何正整数。
ClickHouse 会人为地延长 INSERT 的执行时间(添加“睡眠”),以便后台合并过程可以比添加部件更快地合并部件。
parts_to_throw_insert
如果单个分区中的活动部件数量超过 parts_to_throw_insert 值,则 INSERT 将被中断,并显示 Too many parts (N). Merges are processing significantly slower than inserts 异常。
可能的值
- 任何正整数。
为了实现 SELECT 查询的最大性能,有必要最小化处理的部件数量,请参阅 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
如果自复制日志(ClickHouse Keeper 或 ZooKeeper)条目创建以来的时间超过此阈值,并且部件的大小总和大于 prefer_fetch_merged_part_size_threshold,则优先从副本获取合并的部件,而不是在本地进行合并。这是为了加速非常长的合并。
可能的值
- 任何正整数。
prewarm_mark_cache
如果为 true,则在插入、合并、获取和服务器启动时,通过将标记保存到标记缓存来预热标记缓存。
prewarm_primary_key_cache
如果为 true,则在插入、合并、获取和服务器启动时,通过将标记保存到标记缓存来预热主键缓存。
primary_key_compress_block_size
主键压缩块大小,实际压缩块的大小。
primary_key_compression_codec
主键使用的压缩编码,主键足够小且已缓存,因此默认压缩为 ZSTD(3)。
primary_key_lazy_load
在表初始化时而不是首次使用时将主键加载到内存中。这可以在存在大量表的情况下节省内存。
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns
如果数据部分中列的值至少发生此比例的次数变化,则跳过加载后续列到内存中。这允许通过不加载主键的无用列来节省内存使用量。
ratio_of_defaults_for_sparse_serialization
默认值的数量与列中所有值的数量的最小比例。设置此值会导致该列使用稀疏序列化存储。
如果一列是稀疏的(主要包含零),ClickHouse 可以将其编码为稀疏格式并自动优化计算 - 数据在查询期间不需要完全解压缩。要启用此稀疏序列化,请将 ratio_of_defaults_for_sparse_serialization 设置为小于 1.0。如果该值大于或等于 1.0,则这些列将始终使用常规完全序列化写入。
可能的值
- 启用稀疏序列化的
0到1之间的浮点数 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
仅在 ClickHouse Cloud 中可用。在没有删除/替换任何范围后,再次尝试减少阻塞部件之前的最小等待时间。较低的设置将频繁地触发 background_schedule_pool 中的任务,从而导致大型集群中向 zookeeper 发送大量请求
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
零拷贝表独立信息的 ZooKeeper 路径。
remove_empty_parts
在 TTL、mutation 或 collapsing 合并算法修剪后删除空的部分。
remove_rolled_back_parts_immediately
用于不完整实验功能的设置。
remove_unused_patch_parts
在后台删除已应用于所有活动部分的分片部分。
replace_long_file_name_to_hash
如果列的文件名太长(超过 'max_file_name_length' 字节),则将其替换为 SipHash128
replicated_can_become_leader
如果为 true,则此节点上的复制表副本将尝试获取领导权。
可能的值
truefalse
replicated_deduplication_window
ClickHouse Keeper 存储哈希和以检查重复项的最近插入块数。
可能的值
- 任何正整数。
- 0(禁用去重)
Insert 命令创建了一个或多个块(部分)。对于 insert deduplication,在写入复制表时,ClickHouse 将创建的部分的哈希和写入 ClickHouse Keeper。哈希和仅存储最近的 replicated_deduplication_window 块。最旧的哈希和从 ClickHouse Keeper 中删除。
replicated_deduplication_window 的大数字会降低 Inserts 的速度,因为需要比较更多的条目。哈希和从字段名称和类型的组合以及插入部分的数据(字节流)计算得出。
replicated_deduplication_window_for_async_inserts
ClickHouse Keeper 存储哈希和以检查重复项的最近异步插入块数。
可能的值
- 任何正整数。
- 0(禁用异步插入的去重)
Async Insert 命令将缓存到一个或多个块(部分)。对于 insert deduplication,在写入复制表时,ClickHouse 将每个插入的哈希和写入 ClickHouse Keeper。哈希和仅存储最近的 replicated_deduplication_window_for_async_inserts 块。最旧的哈希和从 ClickHouse Keeper 中删除。replicated_deduplication_window_for_async_inserts 的大数字会降低 Async Inserts 的速度,因为它需要比较更多的条目。哈希和从字段名称和类型的组合以及插入的数据(字节流)计算得出。
replicated_deduplication_window_seconds
从 ClickHouse Keeper 中删除插入块的哈希和的时间(秒)。
可能的值
- 任何正整数。
与 replicated_deduplication_window 类似,replicated_deduplication_window_seconds 指定了存储用于插入去重的块哈希和的时间长短。即使它们小于 replicated_deduplication_window,超过 replicated_deduplication_window_seconds 的哈希和也会从 ClickHouse Keeper 中删除。
时间是相对于最近记录的时间,而不是相对于实际时间。如果它是唯一记录,则将永久存储。
replicated_deduplication_window_seconds_for_async_inserts
从 ClickHouse Keeper 中删除异步插入的哈希和的时间(秒)。
可能的值
- 任何正整数。
与 replicated_deduplication_window_for_async_inserts 类似,replicated_deduplication_window_seconds_for_async_inserts 指定了存储用于异步插入去重的块哈希和的时间长短。即使它们小于 replicated_deduplication_window_for_async_inserts,超过 replicated_deduplication_window_seconds_for_async_inserts 的哈希和也会从 ClickHouse Keeper 中删除。
时间是相对于最近记录的时间,而不是相对于实际时间。如果它是唯一记录,则将永久存储。
replicated_fetches_http_connection_timeout
已弃用的设置,不起作用。
replicated_fetches_http_receive_timeout
已弃用的设置,不起作用。
replicated_fetches_http_send_timeout
已弃用的设置,不起作用。
replicated_max_mutations_in_one_entry
可以合并并在一个 MUTATE_PART 条目中执行的最大变异命令数(0 表示无限制)
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
如果错误部分与总部分的比率小于此值 - 允许启动。
可能的值
- 浮点数,0.0 - 1.0
search_orphaned_parts_disks
ClickHouse 在任何 ATTACH 或 CREATE 表时都会扫描所有磁盘以查找孤立的部分,以避免遗漏未定义(未包含在策略中)磁盘上的数据部分。孤立的部分源自潜在的不安全存储重新配置,例如,如果磁盘从存储策略中排除。此设置限制了按磁盘特征搜索磁盘的范围。
可能的值
- any - 范围不受限制。
- local - 范围限制为本地磁盘。
- none - 空范围,不搜索
serialization_info_version
在写入 serialization.json 时使用的序列化信息版本。此设置对于集群升级期间的兼容性是必需的。
可能的值
basic- 基本格式。with_types- 使用额外的types_serialization_versions字段进行格式化,允许按类型设置序列化版本。这使得像string_serialization_version这样的设置生效。
在滚动升级期间,将其设置为 basic,以便新服务器生成与旧服务器兼容的数据部分。升级完成后,切换到 WITH_TYPES 以启用按类型序列化版本。
shared_merge_tree_activate_coordinated_merges_tasks
激活协调合并任务的重新调度。即使在 shared_merge_tree_enable_coordinated_merges=0 时,这也可以有用,因为这将填充合并协调器统计信息并帮助冷启动。
shared_merge_tree_create_per_replica_metadata_nodes
在 ZooKeeper 中启用每个副本的 /metadata 和 /columns 节点的创建。仅在 ClickHouse Cloud 中可用
shared_merge_tree_disable_merges_and_mutations_assignment
停止共享合并树的合并分配。仅在 ClickHouse Cloud 中可用
shared_merge_tree_empty_partition_lifetime
如果分区没有数据部分,则分区在 keeper 中存储多长时间(秒)。
shared_merge_tree_enable_automatic_empty_partitions_cleanup
启用 Keeper 中空分区条目的清理。
shared_merge_tree_enable_coordinated_merges
启用协调合并策略
shared_merge_tree_enable_keeper_parts_extra_data
启用将属性写入虚拟部分并在 keeper 中提交块
shared_merge_tree_enable_outdated_parts_check
启用过时部分检查。仅在 ClickHouse Cloud 中可用
shared_merge_tree_idle_parts_update_seconds
在共享合并树中,不被 ZooKeeper watch 触发的情况下,部分更新的间隔时间(秒)。仅在 ClickHouse Cloud 中可用
shared_merge_tree_initial_parts_update_backoff_ms
部分更新的初始退避时间。仅在 ClickHouse Cloud 中可用
shared_merge_tree_interserver_http_connection_timeout_ms
服务器间 HTTP 连接的超时时间。仅在 ClickHouse Cloud 中可用
shared_merge_tree_interserver_http_timeout_ms
服务器间 HTTP 通信的超时时间。仅在 ClickHouse Cloud 中可用
shared_merge_tree_leader_update_period_random_add_seconds
为了避免惊群效应,向 shared_merge_tree_leader_update_period 添加一个从 0 到 x 秒的均匀分布值。仅在 ClickHouse Cloud 中可用
shared_merge_tree_leader_update_period_seconds
重新检查部分更新领导权的最大周期。仅在 ClickHouse Cloud 中可用
shared_merge_tree_max_outdated_parts_to_process_at_once
领导者一次尝试确认删除的最大过时部分数量。仅在 ClickHouse Cloud 中可用。
shared_merge_tree_max_parts_update_backoff_ms
部分更新的最大退避时间。仅在 ClickHouse Cloud 中可用
shared_merge_tree_max_parts_update_leaders_in_total
部分更新领导者的最大数量。仅在 ClickHouse Cloud 中可用
shared_merge_tree_max_parts_update_leaders_per_az
部分更新领导者的最大数量。仅在 ClickHouse Cloud 中可用
shared_merge_tree_max_replicas_for_parts_deletion
参与部分删除(killer 线程)的最大副本数。仅在 ClickHouse Cloud 中可用
shared_merge_tree_max_replicas_to_merge_parts_for_each_parts_range
尝试分配潜在冲突合并的最大副本数(允许避免合并分配中的冗余冲突)。0 表示禁用。仅在 ClickHouse Cloud 中可用
shared_merge_tree_max_suspicious_broken_parts
SMT 的最大损坏部分数,如果更多 - 拒绝自动分离。
shared_merge_tree_max_suspicious_broken_parts_bytes
SMT 中所有损坏部分的最大大小,如果更多 - 拒绝自动分离。
shared_merge_tree_memo_ids_remove_timeout_seconds
我们存储插入记忆化 ID 的时间,以避免在插入重试期间出现错误的操作。仅在 ClickHouse Cloud 中可用
shared_merge_tree_merge_coordinator_election_check_period_ms
合并协调器选举线程运行之间的时长
shared_merge_tree_merge_coordinator_factor
协调器线程延迟的时间变化因子
shared_merge_tree_merge_coordinator_fetch_fresh_metadata_period_ms
合并协调器应该与 zookeeper 同步以获取最新元数据的频率
shared_merge_tree_merge_coordinator_max_merge_request_size
协调器一次可以从 MergerMutator 请求的合并数量
shared_merge_tree_merge_coordinator_max_period_ms
合并协调器线程运行之间的最大时间
shared_merge_tree_merge_coordinator_merges_prepare_count
协调器应该准备并分发给工作者的合并条目数量
shared_merge_tree_merge_coordinator_min_period_ms
合并协调器线程运行之间的最小时间
shared_merge_tree_merge_worker_fast_timeout_ms
合并工作线程在需要更新其状态后立即执行操作时将使用的超时时间
shared_merge_tree_merge_worker_regular_timeout_ms
合并工作线程运行之间的时长
shared_merge_tree_outdated_parts_group_size
仅在 ClickHouse Cloud 中可用。用于过时部分清理的相同 rendezvous 哈希组中的副本数量。
shared_merge_tree_partitions_hint_ratio_to_reload_merge_pred_for_mutations
仅在 ClickHouse Cloud 中可用。当 <仅用于变异的分区候选分区(无法合并的分区)>/<用于变异的分区候选分区> 的比率高于该设置时,将重新加载合并谓词。
shared_merge_tree_parts_load_batch_size
一次调度获取元数据的部件数量。仅在 ClickHouse Cloud 中可用
shared_merge_tree_postpone_next_merge_for_locally_merged_parts_ms
在本地合并部件后,延迟启动包含该部件的新合并的时间。为其他副本提供获取该部件并启动此合并的机会。仅在 ClickHouse Cloud 中可用。
shared_merge_tree_postpone_next_merge_for_locally_merged_parts_rows_threshold
延迟分配下一个合并的部件的最小大小(行数),仅在本地合并后。仅在 ClickHouse Cloud 中可用。
shared_merge_tree_range_for_merge_window_size
在本地合并部件后,延迟启动包含该部件的新合并的时间。为其他副本提供获取该部件并启动此合并的机会。仅在 ClickHouse Cloud 中可用
shared_merge_tree_read_virtual_parts_from_leader
尽可能从 leader 读取虚拟部件。仅在 ClickHouse Cloud 中可用
shared_merge_tree_try_fetch_part_in_memory_data_from_replicas
如果启用,所有副本将尝试从已经存在该数据的其他副本获取内存数据(例如主键、分区信息等)。
shared_merge_tree_update_replica_flags_delay_ms
副本根据后台计划重新加载其标志的频率。
shared_merge_tree_use_metadata_hints_cache
启用从其他副本的内存缓存中请求 FS 缓存提示。仅在 ClickHouse Cloud 中可用
shared_merge_tree_use_outdated_parts_compact_format
为过时部件使用紧凑格式:减少 Keeper 的负载,提高过时部件的处理效率。仅在 ClickHouse Cloud 中可用
shared_merge_tree_use_too_many_parts_count_from_virtual_parts
如果启用,过多的部件计数将依赖于 Keeper 中的共享数据,而不是本地副本状态。仅在 ClickHouse Cloud 中可用
shared_merge_tree_virtual_parts_discovery_batch
应打包到批处理中的分区发现数量
simultaneous_parts_removal_limit
如果存在大量过时部件,清理线程将尝试在一次迭代期间删除最多 simultaneous_parts_removal_limit 个部件。将 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
这是表磁盘,路径/端点应指向表数据,而不是数据库数据。仅适用于 s3_plain/s3_plain_rewritable/web。
temporary_directories_lifetime
保留 tmp_-目录的时间(秒)。您不应降低此值,因为合并和变异可能无法使用此设置的低值正常工作。
try_fetch_recompressed_part_timeout
在启动带有重新压缩的合并之前的超时时间(秒)。在此期间,ClickHouse 尝试从分配了此带有重新压缩的合并的副本获取重新压缩的部件。
重新压缩在大多数情况下都很慢,因此我们不会在超时之前启动带有重新压缩的合并,并尝试从分配了此带有重新压缩的合并的副本获取重新压缩的部件。
可能的值
- 任何正整数。
ttl_only_drop_parts
控制是否在 MergeTree 表中完全删除数据部件,当该部件中的所有行都根据其 TTL 设置过期时。
当 ttl_only_drop_parts 被禁用(默认情况下)时,只有根据其 TTL 设置过期的行才会被删除。
当 ttl_only_drop_parts 被启用时,如果该部件中的所有行都根据其 TTL 设置过期,则整个部件将被删除。
use_adaptive_write_buffer_for_dynamic_subcolumns
允许在写入动态子列期间使用自适应写入缓冲区,以减少内存使用量
use_async_block_ids_cache
如果为 true,我们将缓存异步插入的哈希和。
可能的值
truefalse
带有多个异步插入的块将生成多个哈希和。当某些插入被重复时,keeper 将仅在一个 RPC 中返回一个重复的哈希和,这将导致不必要的 RPC 重试。此缓存将监视 Keeper 中的哈希和路径。如果 Keeper 中监视到更新,则缓存将尽快更新,以便我们能够在内存中过滤重复的插入。
use_compact_variant_discriminators_serialization
启用 Variant 数据类型中区分器二进制序列化的紧凑模式。当只有一种变体或大量 NULL 值时,此模式允许使用更少的内存来存储部件中的区分器。
use_const_adaptive_granularity
始终为整个部件使用恒定粒度。它允许在内存中压缩索引粒度值。这在具有稀薄表的极大型工作负载中可能很有用。
use_metadata_cache
已弃用的设置,不起作用。
use_minimalistic_checksums_in_zookeeper
在 ZooKeeper 中使用小型格式(数十字节)的部件校验和,而不是普通的格式(数十 KB)。在启用之前,请检查所有副本是否支持新格式。
use_minimalistic_part_header_in_zookeeper
ZooKeeper 中数据部件标头的存储方法。如果启用,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
如果为 true,则在垂直合并时优化轻量级删除。
vertical_merge_remote_filesystem_prefetch
如果为 true,则在合并期间对下一列使用远程文件系统的预取。
wait_for_unique_parts_send_before_shutdown_ms
在关闭之前,表将等待指定的时间,以便其他副本获取仅存在于当前副本上的唯一部分(0 表示禁用)。
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
启用为每个子流而不是为 Compact 部分中的每个列写入标记。这允许有效地从数据部分读取单个子列。
例如,列 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的嵌套数组元素的空映射t.c用于元组元素c的嵌套数组元素的 UInt32 数据
当启用此设置时,我们将为这 5 个子流中的每一个写入一个标记,这意味着如果需要,我们可以分别从 granule 中读取每个子流的数据。例如,如果我们要读取子列 t.c,我们将只读取子流 t.c.size0、t.c.null 和 t.c 的数据,而不会读取子流 t.a 和 t.b 的数据。当此设置被禁用时,我们将只为顶级列 t 写入一个标记,这意味着即使我们只需要某些子流的数据,我们也会始终从 granule 中读取整个列数据。
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
如果启用了零拷贝复制,则在尝试锁定进行合并或变异之前,休眠最多 500 毫秒的随机时间。
zookeeper_session_expiration_check_period
ZooKeeper 会话过期检查周期,以秒为单位。
可能的值
- 任何正整数。