ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ClickHouse v24.6.4.42-stable 补丁发布解析:16 项 Bug 修复及其源码佐证

ClickHouse v24.6.4.42-stable 补丁发布解析:16 项 Bug 修复及其源码佐证 ClickHouse v24.6.4.42-stable 补丁发布解析16 项 Bug 修复及其源码佐证【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本文基于 ClickHouse 仓库中 v24.6.4.42-stable 的官方 Changelog逐项解读这个 24.6 分支补丁版本相对 v24.6.3.95-stable 修复的 16 个用户可见缺陷与 3 项次要变更并结合仓库源码定位关键修复点时间窗口函数、Variant 列、SIPHash 系列哈希函数等帮助运维与开发者评估是否升级、升级后应如何验证。版本定位与 Changelog 结构该版本的完整标题为ClickHouse release v24.6.4.42-stable (c534bb4b4dd) FIXME as compared to v24.6.3.95-stable (8325c920d11)从版本号可以读出 ClickHouse 的语义化版本规则24.6是年份2024 月份6 月组成的分支版本4是第 4 个补丁42是补丁构建序号括号内c534bb4b4dd是本版本对应的 Git 提交短哈希8325c920d11是其比较基线 v24.6.3.95-stable 的提交哈希。24.6 分支属于稳定分支后续只接收 backport回合的修复不引入新功能。本版本文档v24.6.4.42-stable.md由两个章节组成Bug Fixuser-visible misbehavior in an official stable release正式稳定版中用户可见行为的错误修复共 16 条NOT FOR CHANGELOG / INSIGNIFICANT不影响最终用户、不对外的内部变更共 3 条。每一条修复都带有 Backported in #issue 前缀和对应的 PR 编号及作者说明它来自 master 分支的某个修复被回合backport到了 24.6 release 分支。同分支的前后版本v24.6.3.95-stable.md 与 v24.6.5.30-stable.md可用于串联该分支的完整修复时间线。SQL 语义与执行计划类修复1. 外部数据库查询中的布尔字面量PR #66282修复发往外部数据库如PostgreSQL引擎的查询中布尔字面量的翻译问题。ClickHouse 的布尔字面量true/false在跨库查询postgres()表函数等下发前需要做方言转换此前转换逻辑存在缺陷导致外部库收到的字面量不正确。2.count()在非确定性谓词下结果错误PR #67922当谓词WHERE 条件中包含非确定性函数时count()可能返回错误结果。这类问题通常与谓词下推、常量折叠时把非确定性函数当作可提前求值的表达式处理有关——修复保证了优化器不再对含非确定性函数的谓词做错误的提前求值或改写。3. 移除针对含OFFSET子查询的错误排序消除优化PR #68099修复 #67906优化器原先有一条移除子查询中排序的优化但它没有正确处理子查询中带OFFSET的场景导致返回的行不符合 LIMIT/OFFSET 语义。本版本直接移除了这条不正确的优化属于典型的宁可少优化、不可算错结果的取舍。4.indexHint函数边界用例PR #66286indexHint是用于提示存储引擎使用哪个二级索引的函数该问题由 fuzzer 自动发现属于输入解析层面的边界修复。崩溃与稳定性修复含源码佐证5. 时间窗口边界函数空指针解引用PR #68098一个经过特制的查询可以通过hopEnd、hopStart、tumbleEnd、tumbleStart四个函数触发 NULL 指针解引用并导致服务端崩溃。这四个函数都是时间窗口滑动窗口/翻滚窗口的边界计算函数其实现位于 src/Functions/FunctionsTimeWindow.cpp。从源码结构看该文件在入口处通过dispatchForIntervalColumns校验 interval 列是否为常量 Int64 且必须为正数通过executeWindowBound校验第一个参数必须是Tuple(DateTime, DateTime)类型——PR #68098 正是补全了这条校验链上导致空指针访问的分支。这类修复对暴露 HTTP 接口的 ClickHouse 实例尤为重要修复前任何能提交查询的用户都可能使进程退出。6. SIPHash 系列函数对空数组/空元组报LOGICAL_ERRORPR #68630sipHash64Keyed、sipHash128Keyed、sipHash128ReferenceKeyed作用于空数组[]或空元组()时会抛出LOGICAL_ERROR而非按预期返回常量结果。该系列的实现位于 src/Functions/FunctionsHashingMisc.cpp。修复后这些调用退化为对空输入的常量哈希符合 ClickHouse 向量函数对空容器返回单元素常量列的常规行为约定。存储读取与 DDL 校验类修复7. Variant 子列读取时的PARAMETER_OUT_OF_BOUND误报PR #66659读取 Variant 类型的子列时可能触发本不该发生的PARAMETER_OUT_OF_BOUND错误。Variant 列的底层实现是 src/Columns/ColumnVariant.cpp其中insertRangeFrom方法在参数越界时会抛出该错误见 ColumnVariant.cpp 第 533 行该 PR 修正了读取 Variant 子列时传入该方法的区间参数计算消除误报。8. 非归档文件名/URI 中含::的解析PR #67433文件路径或远端 URI如 S3 地址中包含::时只要它不是归档archive现在能被正确解析。此前::是归档内文件语法的分隔符未加甄别地应用于非归档路径会导致读取失败。9. 新分析器下 mutation 未跳过无关 partPR #68052启用新查询分析器analyzer后mutationALTER TABLE ... UPDATE/DELETE类后台重写操作本应根据谓词跳过不受影响的 part但实际却把不受影响的 part 也重写了白白消耗磁盘 IO 和 CPU。修复恢复了跳过未触及 part的行为。10.ALTER ADD/MODIFY COLUMN校验实验性/可疑类型PR #67911现在对 ALTER 新增或修改列时出现的实验性experimental或标记为可疑的数据类型会进行显式校验避免把未成熟类型固化进表结构后引发难以回滚的问题。接口、集群与副本同步类修复11. HTTP 接口向流引擎Kafka/RabbitMQ/NATS写入PR #67554修复通过 HTTP 接口向 Kafka、RabbitMQ、NATS 这类流式只读消费引擎执行 INSERT 的问题。这类引擎表是数据源而非数据目标此前经由 HTTP 接口插入时的行为不正确修复使其按预期被拒绝或正确处理。12.cluster()函数与 inter-server secret 的交互PR #66364配置了interserver_credentialsinter-server secret后cluster()表函数展开远程查询时对远端节点的认证方式会改变。该修复保留原有行为以初始用户身份连接远端节点避免该配置项悄然改变cluster()查询的认证语义。13.SYSTEM SYNC REPLICA缺少 sync 模式PR #68326修复 #68396SYSTEM SYNC REPLICA命令用于手动触发 Replicated 表引擎副本追赶最新数据此前该命令缺少同步sync模式的支持现在补齐。14. PostgreSQL 外部库查询被取消时的崩溃PR #68288当指向外部 PostgreSQL 的查询被取消客户端断开、超时等时ClickHouse 侧对底层 PostgreSQL 库的错误处理存在竞态可能触发崩溃本版本尝试修复了该路径。15. 容器环境下最大线程软限计算错误PR #67963修复了在可用 CPU 数量受限的容器化环境如设置了cpulimit 的 Docker/K8s Pod中计算最大线程数软限max thread soft limit时未正确读取 cgroup/CPU 配额的问题。此前 ClickHouse 在受限容器内可能按宿主机核数派生线程数导致过度超卖修复后线程预算与实际可用 CPU 匹配。16.ReplaceTableNodeToDummyVisitor遍历未解析的表函数参数PR #67522修复 #66026优化器改写阶段的ReplaceTableNodeToDummyVisitor会对未解析的表函数参数做遍历存在越界/误处理风险该 PR 避免了对这类参数的遍历消除了相关异常路径。NOT FOR CHANGELOG内部变更以下三项不影响最终用户行为列出于此以保证变更可追溯发布后版本号自增PR #67909release 流程由机器人自动完成属于常规发版动作ALTER MODIFY SQL SECURITY作用于非视图表时报显式错误PR #67953把原先的含糊失败改为明确的报错信息便于用户发现误用补丁发布流程调整PR #68750为了支持从 release 分支任意提交直接打补丁版本package_debug构建不再可跳过这是发布工程侧的 CI 调整。升级与验证建议适用前提本版本仅包含修复无新特性面向需要 24.6 稳定分支的用户从 v24.6.3.x 升级到 v24.6.4.42 是纯补丁升级不涉及数据格式不兼容变更。验证方式升级后可用clickhouse-server --version或查询SELECT version()确认构建号是否含42对照括号中的提交短哈希c534bb4b4dd可进一步核对二进制与发布物的对应关系。重点关注场景如果你的部署涉及a对外的 HTTP 查询接口且使用过hopEnd/tumbleEnd等窗口函数、b容器化限 CPU 部署、cReplicated 表引擎 定期SYSTEM SYNC REPLICA、dS3/远端文件路径中带::的读取本版本的对应修复与你直接相关。完整时间线24.6 分支上 v24.6.4.42 之前是 v24.6.3.95-stable.md之后是 v24.6.5.30-stable.md三者共同构成该分支从 v24.6.3 到 v24.6.5 的完整修复记录。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表