ClickHouse 24.8 LTS 补丁版深度解读:v24.8.14.39-lts 的稳定性、安全与查询修复全景
发布时间:2026/9/17 20:52:02 锦皓数字建站

ClickHouse 24.8 LTS 补丁版深度解读v24.8.14.39-lts 的稳定性、安全与查询修复全景【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse导读本文以 ClickHouse 官方 2025 年变更日志 v24.8.14.39-lts 为主体系统梳理该 24.8 LTS 分支补丁版本对比上一版本 v24.8.13.16-lts带来的全部变更13 项用户可见的 Bug 修复、1 项构建/测试/打包改进以及若干不影响发布日志的内部修复。读者通过本文可快速掌握该版本解决了哪些崩溃、查询语义错误与安全风险并了解如何在升级前评估这些修复对自身场景的影响。一、版本概览与定位v24.8.14.39-lts提交502d03925cf属于 ClickHouse24.8 长期支持LTS分支其对比基线是v24.8.13.16-lts提交c8a1e828dcf。LTS 分支的特点是只合入经过验证的修复backport不引入新功能因此本次变更以Bug Fix为主——全部修复均标注了对应的 backport issue 编号如 #75642、#75118、#75305 等代表它们是官方在稳定发布版中确认的用户可见问题user-visible misbehavior。从变更类型上看本次发布包含三类内容类别数量代表内容Bug Fix官方稳定版用户可见问题13崩溃修复、索引使用修复、JOIN 语义修复、Keeper 日志修复、安全加固Build/Testing/Packaging Improvement1dockerentrypoint.sh重构 clickhouse-extract-from-config --users新开关NOT FOR CHANGELOG / INSIGNIFICANT2测试稳定性flaky test修复、ASTTTLElement 函数名规范化下文按技术主题分组展开便于读者按自身关注点检索。二、崩溃类问题修复直接提升可用性该版本修复了 6 类可能导致服务崩溃或读取异常的缺陷是本次发布中占比最大、影响最直接的部分。1. 插入 Interval 数据时崩溃此前在特定场景下向表中插入 Interval 类型数据可能直接触发服务端崩溃本次通过 PR #74478 修复关联 issue #74299。Interval 是 ClickHouse 中表示时间间隔的复合类型INTERVAL 1 DAY等常在日期时间运算中作为中间结果。该修复对高频写入时间序列数据的用户尤为重要——建议升级后针对INTERVAL字面量相关 INSERT 语句做回归验证。2. JSON 类型声明解析崩溃当JSON 类型的声明中类型名不是大写例如json(a UInt32)中的UInt32写成了小写时类型声明解析阶段可能崩溃本次通过 PR #74784 修复。这属于 SQL 解析器健壮性问题ClickHouse 类型名本不区分大小写修复后解析逻辑不再因非大写类型名而异常退出。3. PSQLPostgreSQL复制未捕获异常崩溃PR #75062 修复了PostgreSQL 复制PSQL replication过程中因未捕获异常导致的崩溃。PostgreSQL 引擎表ENGINE PostgreSQL及相关复制能力在同步数据时若收到异常响应此前可能直接使服务崩溃修复后异常被正确捕获并转化为可处理的错误信息。4. Protobuf 格式 schema 缓存并发崩溃PR #75357 修复了Protobuf 格式输出与SYSTEM DROP FORMAT SCHEMA CACHE并行执行时的崩溃。当查询正在以Protobuf格式输出数据、同时另一条查询执行SYSTEM DROP FORMAT SCHEMA CACHE清空格式 schema 缓存时缓存失效与读取之间存在竞态可能导致服务崩溃。修复保证了 schema 缓存读写的线程安全。5. 异步 RENAME 后读取 MergeTree 罕见崩溃PR #75693 修复了多次异步RENAMEalter_sync 0且涉及不同类型列之间重命名后读取 MergeTree 表的罕见崩溃。异步 ALTER 意味着元数据变更与数据变更分离执行列类型变化期间并发读取会读到不一致的元数据视图修复后读取路径对元数据快照的处理更加安全。6.DistinctSortedStreamTransform空指针解引用PR #75734 修复了去重流水线变换器DistinctSortedStreamTransform的空指针解引用null pointer dereference。该变换器用于对有序流执行DISTINCT去重在特定数据分布下可能访问空指针导致崩溃属于查询执行引擎层面的健壮性修复。三、查询语义与索引使用修复让查询结果更正确除崩溃外本次还修复了 4 项直接影响查询正确性的缺陷。1.optimize_function_to_subcolumns下索引被忽略PR #75081 修复了一个索引使用缺陷当启用设置optimize_function_to_subcolumns时Array、Map和Nullable(...)列的主键与二级索引可能被忽略导致原本可走索引加速的查询退化为全表扫描。该设置用于将针对复杂类型子列的函数调用优化为直接访问子列本次修复确保启用该优化后索引选择逻辑依然正确。该设置在源码中作为服务器设置登记于 src/Core/ServerSettings.cpp与查询优化器行为直接相关。建议启用过该设置的用户关注此修复带来的性能回归。2. LowCardinality 可空列的 nullsafe JOIN 修复PR #75143 修复了JOIN ON 中 nullsafe 比较与 LowCardinality 可空列组合失效的问题。涉及以下形式的 nullsafe 比较IS NOT DISTINCT FROMa IS NULL AND b IS NULL OR a b此前当 JOIN 键为 LowCardinality 可空类型时这些比较无法正确工作修复后语义与普通可空列一致。这对使用低基数枚举型维度列如状态码、地区码做 JOIN 的分析场景影响较大。3. 分布式表 JOIN 中 JSON 子列 Array 尺寸不一致错误PR #75512 修复了分布式表 JOIN 中 JSON 子列为 Array 类型时报Elements ... and ... of Nested data structure ... (Array columns) have different array sizes错误的问题。该错误源于 JSON 子列在分布式查询重写与传输过程中的 Array 尺寸校验误报修复后这类查询可正常执行。4. TTL 表达式中函数名规范化内部修复PR #75757 修复了ASTTTLElementTTL 表达式 AST 节点内部函数名的规范化问题属于内部实现细节避免因函数名大小写差异导致的 TTL 表达式处理不一致。四、Keeper 修复日志回滚不再写入损坏 changelogPR #75197 是本次针对ClickHouse Keeper内置协调服务的关键修复回滚日志rolling back logs时避免写入损坏的 changelog。Keeper 通过预写日志changelog保证数据一致性在快照加载或日志回滚流程中若回滚逻辑误将新条目写入已标记损坏的 changelog 文件会导致重启后状态不一致甚至数据丢失。该修复保证回滚操作只针对健康日志执行提升了 Keeper 在异常恢复场景下的可靠性。五、安全修复clickhouse-library-bridge库加载路径限制本次发布包含一项安全加固由 ClickHouse Bug Bounty 计划发现clickhouse-library-bridge此前允许从文件系统任意路径打开动态库这使得它只有在隔离环境isolated environment中运行才是安全的。当它与clickhouse-server相邻部署时默认部署方式即是如此存在被利用以加载任意库的潜在漏洞。修复方式PR #75954是将库的加载路径限制为配置中指定的位置。这意味着从本版本起使用 Dictionary 的LIBRARY数据源、以及依赖clickhouse-library-bridge的功能时必须在配置中显式声明允许的库目录。从源码结构看外部桥接服务external bridges在服务器设置体系中与 ODBC/JDBC bridge 并列登记参见 src/Core/ServerSettings.cpp#L2289-L2292 中library_bridge、odbc_bridge、jdbc_bridge的声明桥接基础设施位于 src/BridgeHelper其中IBridgeHelper定义了与桥接进程通信的通用逻辑。升级后建议检查 config 中library字典的配置段为clickhouse-library-bridge指定受限的库搜索路径确认所有LIBRARY类型字典引用的.so文件位于该路径内避免升级后字典加载失败。六、构建 / 测试 / 打包改进1. dockerentrypoint.sh重构PR #75643 将所有 clickhouse-server 相关动作封装为函数并且仅在以默认二进制启动时执行。这是对长期遗留改进建议的落地关联 issue #50724此前无论以何种参数启动容器server 初始化逻辑都会执行重构后只有在直接启动默认clickhouse二进制时才执行 server 相关动作让 entrypoint 脚本在自定义启动场景如作为 client 或 keeper 启动下更干净、可预测。对应脚本位于仓库 docker/server 目录。2.clickhouse-extract-from-config新增--users开关同一次 PR 还为配置提取工具新增了--users开关用于从users.xml中提取配置值。该工具位于 programs/extract-from-config此前仅能提取主配置config.xml中的值新增开关后运维脚本可以统一从用户配置文件读取如max_memory_usage、readonly等用户级设置便于自动化运维与配置审计。3. 测试稳定性修复不计入变更日志PR #73102 修复了test_replicated_merge_tree_s3_zero_copy/test.py::test_drop_table的flaky test不稳定测试通过减少循环次数与退避周期避免测试超出客户端超时。该修复虽不影响生产功能但体现了 LTS 分支对测试基础设施质量的持续维护。七、升级建议与回归验证清单综合以上变更若您正在运行 24.8 LTS 分支v24.8.13.16-lts 或更早补丁版本升级到v24.8.14.39-lts前建议重点验证以下场景关注点对应修复验证建议时间序列写入Interval 插入崩溃执行含INTERVAL字面量的 INSERTJSON 使用JSON 类型声明解析使用非大写内嵌类型名声明 JSON 列并查询去重查询DistinctSortedStreamTransform 崩溃对有序流执行SELECT DISTINCT维度 JOINLowCardinality nullsafe JOIN用IS NOT DISTINCT FROM/做 LowCardinality 可空列 JOIN索引优化optimize_function_to_subcolumns开启该设置后 EXPLAIN 检查 Array/Map/Nullable 索引是否命中PostgreSQL 同步PSQL 复制崩溃触发复制中断/重连场景Keeper日志回滚损坏执行日志回滚并重启验证状态一致Library 字典bridge 路径限制检查 LIBRARY 字典 .so 路径是否在配置允许范围内容器部署entrypoint 重构验证默认与自定义启动方式均正常该 changelog 文件位于 docs/changelogs/v24.8.14.39-lts.mdClickHouse 每个版本均在此目录维护对应变更记录可作为升级决策与回归测试的直接依据。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。