ClickHouse 24.11.3.66 稳定版变更解析:强制合并增强、备份恢复提速与系统性故障修复 📅 发布时间:2026/9/16 19:53:42 👁 浏览次数: ClickHouse 24.11.3.66 稳定版变更解析强制合并增强、备份恢复提速与系统性故障修复【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本篇文章围绕 ClickHouse 官方稳定分支的补丁版本 v24.11.3.66-stable相较上一稳定版 v24.11.2.101-stable 的增量更新展开解读该版本引入的 1 项新特性、2 项改进与 19 项用户可见缺陷修复并结合当前仓库源码如 MergeTreeSettings.cpp、SimpleMergeSelector.cpp、StorageSystemMutations.cpp说明其底层原理。读完你将掌握该版本的完整变更清单、每个修复背后的机制、以及升级前需要关注的行为变化。版本概况v24.11.3.66-stable 是 ClickHouse 24.11 稳定分支上的一个维护型补丁版本其变更集全部通过 backport 机制从主分支回移而来。与上一稳定版 v24.11.2.101-stable 相比本版本不包含破坏性变更变更内容按类别划分为New Feature新特性1 项涉及强制合并策略的行为调整Improvement改进2 项涉及system.mutations可观测性与RESTORE恢复性能Bug Fix缺陷修复19 项用户可见问题修复覆盖 MergeTree 合并、备份恢复、动态列Dynamic/JSON、对象存储队列、访问控制、字典、分布式查询等多个子系统NO CL ENTRY / NOT FOR CHANGELOG若干内部重构与测试修复。该版本的原始变更记录位于 v24.11.3.66-stable.md属于 2025 年归档 Changelog 的组成部分对应 docs/changelogs/archive 目录中的年度归档体系。新特性强制合并可忽略最大字节限制变更内容本版本唯一的新特性PR #73656为当min_age_to_force_merge_seconds与min_age_to_force_merge_on_partition_only同时启用时part 合并将忽略max_bytes_to_merge_at_max_space_in_pool的字节上限限制。在此之前即便用户显式要求把整个分区强制合并成一个 part合并选择器仍会受背景合并池中单次合并的最大字节数约束导致大分区无法被一次合并完毕强制合并的目的无法达成。底层实现原理在 MergeTreeSettings.cpp 中可以看到这两个设置的定义min_age_to_force_merge_secondsUInt64默认 0当范围内所有 part 的年龄都超过该阈值秒时执行合并min_age_to_force_merge_on_partition_onlyBool默认 false上述年龄条件是否仅作用于整个分区而非子集用于整个分区一次性合并成单个 part。合并选择器在 SimpleMergeSelector.cpp 的allow函数中实现了年龄强制合并判定if (settings.min_age_to_force_merge min_age static_castdouble(settings.min_age_to_force_merge)) return true;allow是合并是否被允许的核心判据。当年龄条件满足时直接返回true意味着绕过了后续基于 size ratio 的常规合并判定。本版本在此基础上进一步调整在min_age_to_force_merge_on_partition_only场景下同时放宽max_bytes_to_merge_at_max_space_in_pool的约束使整个分区能在一个合并任务中完成。关联设置与使用建议围绕该行为仓库中还提供了两个密切相关的控制开关定义于 MergeTreeSettings.cppenable_max_bytes_limit_for_min_age_to_force_mergeBool默认 true控制上述强制合并是否仍尊重max_bytes_to_merge_at_max_space_in_pool。本版本的变更即允许其生效路径被关闭从而真正实现整分区合并number_of_free_entries_in_pool_to_execute_optimize_entire_partitionUInt64默认 25当合并池中空闲条目低于该值时不在后台执行整个分区优化任务以保留空闲线程给常规合并避免出现 Too many parts。此外仓库还提供了同族设置min_partition_age_to_force_merge_seconds见 MergeTreeSettings.cpp它用于分区不再接收写入时按分区年龄强制合并且每个合并仍尊重max_bytes_to_merge_at_max_space_in_pool。文档明确说明在 Simple 与 StochasticSimple 合并选择器下它不能与min_age_to_force_merge_secondsmin_age_to_force_merge_on_partition_only组合使用——因为只有整分区一次合并才会被标记为 final从而允许ReplacingMergeTree执行CLEANUP。实践建议分区能一次合并完用后一组设置不能则用min_partition_age_to_force_merge_seconds。验证此行为的单元测试位于 gtest_simple_merge_selector.cpp其中直接引用了这些设置是理解合并选择器行为边界的良好参考。改进一system.mutations新增错误码列变更内容PR #72398 为系统表system.mutations新增了latest_fail_error_code_name列用于记录最近一次 part 变更mutation失败时异常对应的错误码名称。其动机是为卡住的 mutation引入新监控指标并基于错误构建图表同时可选地添加噪声更低的告警。实现细节该列在系统表定义中声明StorageSystemMutations.cpp{ latest_fail_error_code_name, std::make_sharedDataTypeString(), The error code of the exception that caused the most recent part mutation failure. },底层状态结构在 MergeTreeMutationStatus.h 中新增字段String latest_fail_error_code_name ;并在查询时填充StorageSystemMutations.cppres_columns[col_num]-insert(status.latest_fail_error_code_name);同时该字段也被引入复制表Replicated的 mutation 队列结构ReplicatedMergeTreeQueue.h意味着复制表场景下 mutation 失败信息同样可被持久化并查询。使用示例SELECT database, table, command, latest_fail_error_code_name, is_done FROM system.mutations WHERE NOT is_done FORMAT Vertical;通过该列运维人员可以在 mutation 长期不完成时直接看到失败的错误码名称如资源不足、格式错误等据此判断是否需要人工介入或直接接入监控告警系统。改进二RESTORE 并行建表加速大规模备份恢复变更内容PR #72427 实现了从备份恢复RESTORE时并行创建表。在此之前RESTORE命令始终以单线程顺序创建表当备份包含大量表时这一阶段可能成为恢复流程的性能瓶颈。源码佐证并行恢复相关设置与元数据查找逻辑已体现在 BackupSettings.h 与 BackupMetadataFinder.h 中这两个文件均包含与 parallel 相关的逻辑配合 src/Backups 目录下完整的备份/恢复实现可确认并行建表能力已内置于 24.11 稳定分支。实践建议对于包含成百上千张表的库级备份升级到本版本后RESTORE的建表阶段可显著缩短若希望控制恢复期间的并发压力可在恢复任务中显式设置并发相关的资源使用参数观察system.backups中的status与进度信息。Bug Fix 全览19 项用户可见问题修复以下按子系统归类梳理本版本的修复项便于按业务场景定位是否与自己相关。MergeTree 合并、查询优化与 FINAL修复ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE后的暂停PR #72024该问题源于后台任务调度设置获取不正确导致分区替换/移动操作后合并调度出现不必要的暂停修复FINALSAMPLE查询中的NOT_FOUND_COLUMN_IN_BLOCKPR #73682同时修复了在启用 FINAL 优化时从CollapsingMergeTree进行SELECT ... FINAL得到错误结果的问题修复LIMIT BY COLUMNS崩溃PR #73686LIMIT BY与COLUMNS表达式组合使用时的崩溃场景修复投影projection中别名按逆序选择时未正确添加PR #74033当某别名被另一别名引用且按逆序选中时别名可能无法被加入投影定义修复parallel_replicas_for_non_replicated_merge_tree在子查询中被忽略PR #73584非复制 MergeTree 的并行副本设置在子查询中对非复制表不生效的问题。动态列 Dynamic / JSON 与子列修复 Dynamic/JSON 列 squashing 准备逻辑PR #73388此前即使类型/路径数量未达到限制新类型也可能被错误地插入共享 variant/shared data修复 Dynamic 列的数据不一致PR #73644解决Nested columns sizes are inconsistent with local_discriminators column size逻辑错误修复 Dynamic/Object 结构反序列化PR #73767此前可能导致CANNOT_READ_ALL_DATA异常修复嵌套 Map 创建时的高内存占用PR #73982修复tupleElement函数错误PR #73548当元组包含LowCardinality元素且启用optimize_functions_to_subcolumns时可能出现的结果错误修复从压缩的 Memory 引擎表读取子列时崩溃PR #74161对应 issue #74009。备份恢复与对象存储恢复时跳过metadata_version.txtPR #73768避免在从备份恢复 part 时处理该元数据文件引发问题修复 S3 Express 支持PR #73777对应 issue #72078S3 Express One Zone 存储此前在该版本分支上不可用plain_rewritable 磁盘支持多实例共享AzurePR #74059使用 plain_rewritable 元数据的磁盘可在多个 server 实例间共享初始化期间忽略对象未找到错误与 S3 行为保持一致修复 ObjectStorageQueue 与 ZooKeeper/旧版 Keeper 的兼容问题PR #73420。访问控制与字典修复REVOKE ALL ON *.*无法执行PR #72872目标访问实体中存在隐式授权implicit grants时导致的问题修复字典数据源包含错误数据函数时的段错误segfaultPR #73535。查询解析、格式与表引擎修复枚举 glob 后跟 range 的解析PR #73569对应 issue #73473EXPLAIN SYNTAX不再解释执行查询PR #73634对应 issue #65205避免分布式查询因 processing stage 不一致产生逻辑错误TCPHandler 将 format 设置传播到 NativeWriterPR #73179确保output_format_native_write_json_as_string等设置被正确应用修复 Kafka 表引擎关键字参数解析PR #74064修复 s3queue 中将文件标记为 failed 时的逻辑错误PR #74216。内部变更与测试修复除上述用户可见修复外本版本还包含若干 NOT FOR CHANGELOG 级别变更修复线程池异常时loadPathPrefixMap的 use-after-freePR #72870新增一项内部设置PR #73281更新与修复test_storage_s3_queue相关测试PR #73607、#73632涉及test_upgrade(2)与test_alter_settings回退此前因 CI 崩溃引入的变更PR #73738使version_helper从每次提交均被填充PR #74399。另外本版本含一条 NO CL ENTRY 记录回退了此前向 24.11 backport 的latest_fail_error_code_name列变更PR #73974即该改进在本版本中的落地经历了添加—回退—再合入的过程最终以 #72398 的形式稳定合入这也是为什么本文前述的源码与系统表中能看到该列已存在。升级与验证建议确认当前版本执行SELECT version()确认是否已低于 v24.11.3.66-stable若处于同一 24.11 分支可直接通过稳定版通道升级关注合并行为变化若你配置了min_age_to_force_merge_secondsmin_age_to_force_merge_on_partition_only升级后大分区合并可能一次性完成注意监控合并池占用与磁盘 IO可按需调整number_of_free_entries_in_pool_to_execute_optimize_entire_partition验证 mutation 可观测性升级后使用DESCRIBE system.mutations或直接查询新增的latest_fail_error_code_name列确认列可用并可接入监控回归验证受影响场景如果你使用了 Dynamic/JSON 列、FINALSAMPLE、LIMIT BY COLUMNS、S3 Express 或从含大量表的备份执行RESTORE建议在测试环境先行回归再推广到生产。总结v24.11.3.66-stable 是 ClickHouse 24.11 稳定分支上一次聚焦稳定与可观测性的补丁发布一方面通过min_age_to_force_merge族设置的组合行为调整增强了强制合并能力另一方面通过system.mutations新增错误码列与RESTORE并行建表提升了运维可观测性与恢复性能同时修复了横跨合并、动态列、备份恢复、访问控制、查询解析等多个子系统的 19 项缺陷。对于生产环境使用 24.11 分支的用户本版本值得尽快跟进相关行为变化与验证方法可参照上文逐一核对。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考