十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

ClickHouse v24.2.2.71-stable 版本解析:补丁内容、安全修复与源码级实现解读

ClickHouse v24.2.2.71-stable 版本解析:补丁内容、安全修复与源码级实现解读 ClickHouse v24.2.2.71-stable 版本解析补丁内容、安全修复与源码级实现解读【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHousev24.2.2.71-stable 是 ClickHouse 在 2024 年 2 月发布的第二个 stable 补丁版本基于 v24.2.1.2248-stable 修复了十余处用户可见的缺陷涵盖并行查询执行、分析器、并行解析、KQL 复合操作符、S3 集成、数组/聚合函数以及 Keeper 等多个核心模块并包含一处针对 HTTP 解压流程的缓冲区溢出安全修复。阅读本文后你将系统掌握该补丁版本的全部变更明细、每条修复对应的底层源码位置与触发场景以及升级到该版本时的关注要点。版本概览与基线对比本变更记录来自 docs/changelogs/archive/v24.2.2.71-stable.md核心信息如下发布版本v24.2.2.71-stable提交哈希9293d361e72对比基线v24.2.1.2248-stable提交哈希891689a4150变更构成1 项Improvement改进14 项Bug Fix用户可见的官方稳定版行为修复11 项CI Fix or ImprovementCI 修复或改进无需 changelog 条目4 项NOT FOR CHANGELOG / INSIGNIFICANT不进入 changelog 的杂项从整体构成看该补丁版本没有引入新功能全部精力集中在稳定化与安全性上符合 stable 分支“低风险、高收敛”的发布策略。当前仓库的版本演化仍在继续最新版本信息可参考 cmake/autogenerated_versions.txt。Improvement时区数据库升级到 2024a本版本唯一一项功能性改进是更新 tzdata 至 2024aPR #60768作者 Raúl Maríntzdata 的升级直接关系到所有与时区相关的行为toTimezone/fromUnixTimestamp等时区换算函数、DateTime/DateTime64类型的显示与排序、now()的时区语义以及timezone系统表的内容。2024a 版 tzdata 主要反映了世界各国尤其是中东地区对夏令时规则的调整。对于依赖精确时间语义的查询如广告归因、日志时间分桶升级后同一 UTC 时间在不同时区的本地化表示可能发生变化建议在升级时对涉及时区转换的报表做一次回归校验。Bug Fix 全清单与源码级解析并行执行与查询优化1.FINAL并行优化在罕见场景下产生错误结果在并行优化启用时带FINAL的查询即对ReplacingMergeTree、AggregatingMergeTree等表强制合并相同排序键行的操作可能在罕见情况下返回错误结果。修复 PR #60041 修正了并行FINAL的合并逻辑。触发面较窄但后果严重——错误结果通常难以通过常规测试察觉属于典型的“沉默型”数据正确性问题。使用parallel_view_processing相关设置的 MergeTree 重度用户应关注此修复。2. 避免CREATE TABLE时计算标量子查询此前CREATE TABLE语句中的标量子查询scalar subquery会被提前计算导致在特定场景issue #59795、#59930下行为异常或报错。修复 PR #60464 是对此前 PR #57855 的重新实现其思路是CREATE TABLE的列定义解析只关心类型与默认表达式结构无需在 DDL 阶段求值标量子查询。3.allow_experimental_analyzer在子查询中被动态修改导致崩溃当查询在子查询作用域内变更allow_experimental_analyzer设置值时可能触发崩溃。修复 PR #60770 保证了分析器Analyzer开关在子查询中的一致性。这提示全局设置项在子查询内部被临时改写属于高风险操作该修复堵住了这一崩溃路径。并行解析与死锁4. 并行解析在大量行因错误被跳过时发生死锁并行解析parallel parsing模式下当输入数据中大量行因格式错误被跳过时解析线程之间可能互相等待形成死锁。修复 PR #60516 所依赖的解析基础设施中错误行跳过与线程同步的状态机在极端输入下需要正确处理“无可用工作”的信号。KQL 复合操作符与查询大小5. KQL 复合操作符如mv-expand不再受max_query_size误限KQLKusto Query Language复合操作符在展开时会生成超长查询文本此前被max_query_size设置错误地截断关联 issue #59626。修复 PR #60534 目录。系统表与类型提示6. 减少system.numbers的读取行数system.numbers是 ClickHouse 生成序列的常用工具表此前在某些查询计划下会读取超出必要数量的行issue #59418。修复 PR #60546 优化了读取行数直接减少不必要的 I/O 与 CPU 开销提升依赖该表的测试与基准查询效率。7. 日期类型不再输出数字提示此前对日期类型的错误提示中会附带“数字”类建议如建议使用toDate还是直接传数字此类提示对日期语义易产生误导。修复 PR #60577 移除了日期类型的数字提示使报错信息更准确。安全修复本版本包含两项由外部研究团队与 Fuzzer 发现并上报的安全相关问题建议优先评估升级8. HTTP 解压流程缓冲区溢出安全攻击者可通过构造“编解码器组合 触发数值溢出的尺寸”的请求让 HTTP 服务器在解压数据时发生缓冲区溢出编解码器NONE在错误的输入数据上也可能触发缓冲区溢出。该问题由 TIANGONG 研究团队通过官方 Bug Bounty 项目issue #38986提交修复 PR #60731 目录其中NONE编解码器即CompressionCodecNone见 src/Compression/CompressionCodecNone.h。凡对外暴露 HTTP 接口尤其是http_port与https_port的部署都强烈建议升级到本版本或更高版本。9. SQL/JSON 函数读取未初始化内存安全SQL/JSON 相关函数如JSON_EXISTS、JSON_VALUE、JSON_QUERY等在特定输入下能够读取未初始化内存由 Fuzzer 发现issue #60017修复 PR #60738。SQL/JSON 函数族实现在 src/Functions/JSON 目录。读取未初始化内存属于未定义行为可能泄露敏感数据或被用于拒绝服务同样建议尽快升级。S3 集成10. 不再在UploadPart与CompleteMultipartUpload调用中设置x-amz-meta-*自定义元数据头此前分片上传multipart upload会在UploadPart与CompleteMultipartUpload请求中错误携带x-amz-meta-*自定义元数据头部分对象存储服务会拒绝这类请求或产生意外行为。修复 PR #60748 将自定义元数据设置限制在正确的初始化请求CreateMultipartUpload阶段。S3 表函数与 S3 磁盘相关代码见 src/Storages/S3 与 src/Disks/S3。11. 从 S3 读取时跳过过多 key 导致段错误segfault当从 S3 列表结果中跳过过多不匹配的 key 时可能触发段错误。修复 PR #60849 为列表迭代器增加了边界保护。该问题常见于 S3 表上带glob通配符或前缀过滤的查询前缀不匹配数量极大时容易复现。数组与聚合函数12.arrayEnumerateRanked崩溃修复arrayEnumerateRanked及其家族arrayEnumerateUniqRanked、arrayEnumerateDenseRanked在特定输入下崩溃修复 PR #60764 解决了该问题。从源码看这是一个为 Metrica 网络分析系统定制的高维数组计数函数族见 src/Functions/array/arrayEnumerateRanked.h 头部注释。其核心语义是在指定深度depth下对多维数组中的不同值进行编号计数支持clear_depth参数重置计数器-- 一维返回每个元素第几次出现 SELECT arrayEnumerateUniqRanked([hello, world, hello]) -- [1, 1, 2] -- 二维数组默认看最大深度 SELECT arrayEnumerateUniqRanked([[hello, world], [hello], [hello]]) -- [[1,1],[2],[3]] -- 指定 clear_depth1顶层元素各自重新计数 SELECT arrayEnumerateUniqRanked(1, [[hello, world], [hello], [world], [world]]) -- [[1,1],[2],[2],[3]]多个数组参数会按 zip 成元组的方式共同参与编号[hello, hello, world, world], [a, b, b, b]→[1, 1, 1, 2]深度不同的数组会被提升提升方式为复制元素到统一结构。参数解析与深度推断逻辑位于 src/Functions/array/arrayEnumerateRanked.cpp 的getArraysDepths函数中clear_depth必须是Const(UInt64)且为正整数返回值类型是最大有效深度对应的Array(UInt32)嵌套类型。该崩溃修复保证了此类多维输入的稳定性。13.groupArraySorted多个缺陷修复groupArraySorted聚合函数存在多个缺陷修复 PR #61203 一并解决。groupArraySorted实现于 src/AggregateFunctions/AggregateFunctionGroupArraySorted.cpp用于在分组内收集按值排序后的数组并可通过可选的limit参数限制返回元素个数与groupArray的max_array_size语义类似但顺序确定。从源码看其实现提供两种内部策略heap 策略GroupArraySortedDataHeap维护一个最小堆超过limit时用heapReplaceTop替换堆顶并调整保证任意时刻只保留最小的limit个元素内存占用有界sort 策略GroupArraySortedDataSort先追加再按需排序通过partialSortAndLimitIfNeeded用nth_element定期截断最终在sortAndLimit中完成排序数值类型优先trySort失败则回退到 LSD 基数排序RadixSort。limit参数在构造时被校验上限为aggregate_function_group_array_sorted_max_element_size 0xFFFFFF超限直接抛BAD_ARGUMENTS见 src/AggregateFunctions/AggregateFunctionGroupArraySorted.cpp。本次修复覆盖了该聚合在边界输入下的崩溃与错误结果问题。Keeper14. Keeper 独立二进制standalone binary的运行时重配置修复ClickHouse Keeper 以独立二进制运行时动态重配置runtime reconfig即通过SYSTEM RELOAD CONFIG或 4lw 命令在线调整配置存在缺陷修复 PR #61233 与 programs/keeper。CI 修复与杂项变更本版本还包含 11 项 CI 修复与改进changelog 条目非必需及 4 项不进入 changelog 的杂项主要包括CI 流程重构将工作流 yml 文件抽象化PR #60421、docker server 任务无需输入参数即可清理 yml 文件PR #60602、build_report任务仅由ci_config定义PR #60613、为合并队列merge queue支持做准备PR #61099等发布与回退流程调试并修复markreleasereadyPR #60611、发布分支上不再等待 CI pending 任务以适配 GitHub 任务超时PR #60652、回退backport中为 special build check 报告设置构建数量上限PR #60850执行器健壮性在spawnThreads抛出异常时正确取消PipelineExecutorPR #60499涉及 src/Processors/Executors/PipelineExecutor.cpp 中的线程启动与异常清理路径函数代码卫生为seriesOutliersDetectTukey增加通用健壮性检查PR #60535。该函数基于 Tukey Fences 方法检测时间序列异常点实现在 src/Functions/seriesOutliersDetectTukey.cpp接受 1 个time_series数组或 4 个参数数组 min_percentilemax_percentilek默认分位数为 25%/75%、k1.5分位数合法区间为[0.02, 0.98]k必须为非负数见 src/Functions/seriesOutliersDetectTukey.cpp-- 使用默认参数检测异常点 SELECT seriesOutliersDetectTukey([1, 2, 3, 100, 4, 5]); -- 自定义分位数与 k 值 SELECT seriesOutliersDetectTukey([1, 2, 3, 100, 4, 5], 0.2, 0.8, 2.0);升级建议与验证要点综合本版本变更升级到v24.2.2.71-stable时建议重点关注以下方面安全性优先HTTP 解压缓冲区溢出PR #60731与 SQL/JSON 未初始化内存读取PR #60738均为攻击者可触达的缺陷所有对外暴露 HTTP(S) 端口的实例应尽快升级S3 用户若使用 S3 表函数、S3 磁盘或分片上传本次对x-amz-meta-*头与列表跳过逻辑的修复PR #60748、#60849值得回归验证——尤其是带 glob/前缀过滤的大规模 S3 扫描Keeper 用户独立二进制部署且依赖在线重配置的集群应验证升级后的SYSTEM RELOAD CONFIG行为PR #61233查询正确性使用FINAL并行优化、arrayEnumerateRanked系列函数、groupArraySorted聚合的查询建议在升级后对照已知结果做回归比对对应 PR #60041、#60764、#61203时区行为tzdata 2024a 生效后涉及时区转换的报表结果可能与旧版本存在差异需按业务场景复核。总而言之v24.2.2.71-stable是一个典型的“稳定性 安全”收敛补丁没有新特性但对并行执行、解析器、S3、Keeper 及多项数组/聚合函数的边界场景做了系统性修补是 v24.2 系列值得采纳的推荐版本。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表