ARTICLE DETAIL

资讯详情

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

ClickHouse v21.3.5.42 LTS 补丁版本解析:Bug Fix 清单、回滚陷阱与源码佐证

ClickHouse v21.3.5.42 LTS 补丁版本解析:Bug Fix 清单、回滚陷阱与源码佐证 ClickHouse v21.3.5.42 LTS 补丁版本解析Bug Fix 清单、回滚陷阱与源码佐证【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本指南基于当前仓库docs/changelogs/archive/v21.3.5.42-lts.md中记录的 v21.3.5.42-lts 版本变更逐条解读该补丁版本相比 v21.3.4.25-lts 修复的 23 项 Bug Fix结合仓库源码说明每个修复背后的机制、可能的行为变化与升级注意事项并针对少数可能引发行为差异的修复给出回退workaround方案。阅读后你将能系统掌握该 LTS 补丁版本覆盖的功能面并能在升级后快速定位与这些修复相关的潜在回归。ClickHouse 的 LTSLong-Term Support分支在发布后仍会持续接收针对关键缺陷的 backport向后移植补丁。v21.3.5.42-lts即属于 21.3 LTS 分支上的一个补丁版本其变更主体是相对v21.3.4.25-lts的Bug Fix集合共 23 项外加一条NOT FOR CHANGELOG的说明性条目。整份 changelog 不含新特性、不涉及破坏性改动属于典型的稳定优先维护型发布。从条目内容看这批修复覆盖了分布式查询与表函数、远程连接S3/hedged/异步 socket、ReplicatedMergeTree 的合并与变更mutation、Log 系存储引擎、JOIN 与 arrayJoin、TSV 解析、全文索引、Docker 镜像入口脚本等多个模块恰好对应 21.3 时代生产环境最容易踩到的几类问题。分布式查询与复制表核心修复clusterAllReplicas 的 _shard_num 错误第一个修复针对表函数clusterAllReplicas它曾返回错误的_shard_num列值对应 issue #21481。该修复被 backport 到 21.3 分支合并自 PR #21498。clusterAllReplicas的语义是查询集群中每个分片的所有副本每个副本都被当作独立的 shard/连接来使用因此_shard_num是区分查询结果来自哪个分片的关键虚拟列。在源码 TableFunctionRemote.cpp 中可以看到其定义与cluster表函数的关联is_cluster_function (name cluster || name clusterAllReplicas);其调用语法来自同一文件的文档注释为clusterAllReplicas([cluster_name, db.table, sharding_key][, SETTINGS name value, ...]) clusterAllReplicas([cluster_name, db, table, sharding_key][, SETTINGS name value, ...])源码注释 TableFunctionRemote.cpp 还给出了重要的性能提示cluster/clusterAllReplicas表函数每次请求都会重建服务器连接效率低于预先创建Distributed表在大量查询场景下应优先使用Distributed表。因此如果业务代码长期通过clusterAllReplicas聚合多分片数据并依赖_shard_num做分片归属判断本修复会改变该列的值升级后应对照system.clusters重新核对结果分片映射。外部数据库引擎 JOIN 的未知列裁剪针对 MySQL/PostgreSQL 外部数据库引擎此前在WHERE子句中会出现从被连接表中移除未知列的逻辑缺陷导致查询报错或行为异常关联 issue #14614、#19288、#19645。修复 PR #21640 确保在对外部引擎表做 JOIN 并下推过滤条件时只移除确实不存在的列不再误删合法列。这与外部数据库引擎MySQL/PostgreSQL 引擎位于src/Storages下的查询下推逻辑相关升级后若发现外部表 JOIN 结果列数变化属预期行为修正。标量子查询索引分析修复了标量子查询scalar subquery的索引分析缺陷issue #21717由 PR #18896 引入合并自 PR #21766。这属于查询优化器对子查询可索引性的判断问题修复后标量子查询可能走索引或产生不同的执行计划对依赖EXPLAIN调优的用户升级后建议复核相关查询计划。ReplicatedMergeTree等待 OPTIMIZE / ALTER 不再挂起修复了ReplicatedMergeTree表引擎下等待OPTIMIZE与ALTER查询的问题此前当表被 detach 或服务重启时等待操作可能无限挂起。修复PR #22118保证在上述场景下查询会正常结束。对线上运维而言这直接改善了kill 不掉、等不到结果的运维体验。对已覆盖 part 执行 mutation 不再抛 LOGICAL_ERROR此前对已经被其他 part 覆盖covered的 part 执行变更mutation时会抛出LOGICAL_ERROR异常issue #22013。修复 PR #22291 后该操作被优雅处理。对于频繁执行ALTER TABLE ... UPDATE/DELETE的流水线这是重要的稳定性改进。CollapsingMergeTree 的 granule 行数越界一个罕见但致命的修复CollapsingMergeTree在合并时可能生成index_granularity 1行的 granule进而触发内部检查Incomplete granules are not allowed while blocks are granules size该检查由 #18928 引入影响 21.2 与 21.3最终导致 part 无法合并。修复 PR #21976 消除了该越界情况。若你的业务大量使用折叠树做状态去重此修复直接关系到合并链的可用性。连接层修复hedged requests、异步 socket 与 Linux 内核兼容21.3 时代引入了 hedged requests对冲请求与异步远程 socket 机制来提升分布式查询效率但也带来了一批内核/竞态相关问题本版本集中修复修复内容关联 PR影响对有问题的 Linux 内核禁用async_socket_for_remote/use_hedged_requests#22109避免在新内核上因 poll/epoll 行为差异导致查询卡死use_hedged_requests0async_socket_for_remote1时查询取消失效#22183修复混合配置下KILL QUERY不生效的问题HedgedConnections 取消 packet receiver 前先从 epoll 移除 socket消除竞态#22443疑似修复 issue #22161 的偶发崩溃这类修复对运行在新内核如 5.x 后续小版本上的集群尤为重要。升级后若仍遇到分布式查询挂起可显式设置SET async_socket_for_remote 0; SET use_hedged_requests 0;作为兜底排查手段。内存与 I/O 边界修复并行解析内存记账缺失并行解析parallel parsing例程此前缺少内存统计结果集包含超大 block 时可能 OOMissue #22008。修复 PR #22425 补齐了 accountingmax_memory_usage等内存限制从本版本起在并行解析路径下真正生效。HTTP chunk 不再被限制移除了 HTTP 响应 chunk 大小限制issue #21907合并自 PR #22322改善了大结果集通过 HTTP 接口传输时的吞吐。WriteBufferFromS3 错误处理与日志改进了 S3 写入缓冲区的错误处理与日志记录PR #21836方便 S3 存储场景下的故障诊断。存储引擎Log 系与 TinyLog 的并发安全两个修复都围绕*Log存储引擎的 rwlock读写锁TinyLog 同线程解锁修复在同一线程中解锁 rwlock 的未定义行为UBPR #22560。跨线程解锁规避*Log引擎因另一线程解锁导致 rwlock UBPR #22583 做了规避。此外#22654 修复了SELECT子句不含列时Log表嵌套类型触发LOGICAL_ERROR的问题。对于使用 TinyLog/Log 做轻量缓存表的场景这组修复消除了潜在的崩溃与异常风险。JOIN、TSV 解析与格式相关修复JOIN TOTALS arrayJoin修复Invalid number of rows in Chunk错误issue #19303PR #22129。partial merge join 与 LowCardinality修复部分合并 JOINpartial merge join与LowCardinality类型组合时的缺陷issue #22386、#22388PR #22510。TSV 空字符串反序列化修复 TSV 格式下文件末尾无换行的空字符串反序列化问题issue #20244PR #22527。⚠️ 行为变化提示TSV 修复涉及input_format_null_as_default的语义。changelog 明确指出若不想升级版本可设置input_format_null_as_default 0旧版本默认即为此值作为 workaround。也就是说该修复可能使该设置在新版本中的默认行为发生变化依赖 TSV 中空字符串/NULL语义的导入任务升级后建议用代表性样本数据先做一次导入比对。客户端过早断连 segfault仅在写缓冲区已初始化时才尝试 flush修复客户端极早关闭连接时的段错误issue #22579PR #22591。全文索引与内存安全修复修复了tokenbf_v1全文索引潜在的**缓冲区越界读取buffer overflow on read**问题超出的字节虽不会被使用但读取操作在罕见情况下可能导致崩溃issue #19233合并自 PR #22421。tokenbf_v1是 ClickHouse 内置的基于 Bloom Filter 的全文索引类型用于STRING列的子串/分词加速查询。使用该索引的表升级后应重点观察查询稳定性。Docker 镜像入口脚本修复两个修复均针对官方 Docker 镜像的entrypoint脚本空 LOG_PATH 不再 chown.当LOG_PATH为空时避免对整个当前目录执行chownissue #22100PR #22102。配置中无 http_port 时兼容修复http_port不在配置中时 entrypoint 报错的问题PR #22132。容器化部署的用户应同步升级镜像标签至21.3.5.42这两处修复直接关系容器启动阶段的行为。杂项修复线程池命名与跨库变更 backport后台线程池名称修复后台线程池名称错误PR #22122。这影响system.processes、system.metrics等观测接口中线程名的可读性便于排查哪个后台任务占用资源。最后一条NOT FOR CHANGELOG / INSIGNIFICANT条目为 #21429 的手动 backportPR #22504属于内部整理性质不涉及用户可见行为。升级建议与验证清单综合以上 23 项修复针对运行 21.3 LTS 分支的集群给出如下升级验证清单分布式一致性升级后用SELECT * FROM clusterAllReplicas(...)抽查_shard_num与system.clusters的映射是否一致TSV/CSV 导入回归重点比对含空字符串、文件末尾无换行的导入场景必要时显式设置input_format_null_as_defaultReplicatedMergeTree 运维验证OPTIMIZE TABLE ... FINAL与ALTER TABLE ... UPDATE在 detach/重启后的等待与执行行为JOIN 查询回归TOTALS、arrayJoin、LowCardinality与partial_merge_join组合的查询内存限制生效性观察大结果集并行解析场景下max_memory_usage是否按预期触发内核兼容若部署在较新内核上确认不再出现分布式查询挂起如仍有异常临时关闭async_socket_for_remote与use_hedged_requests定位。整体上v21.3.5.42-lts 是一个含金量高、行为侵入性低的稳定补丁版本修复面覆盖分布式查询、复制表合并、存储引擎并发、格式解析与内存安全等关键路径且绝大多数修复保持原有默认行为不变仅 TSV 空字符串解析一处提示了可能的默认值变化。作为 21.3 LTS 分支的用户建议优先升级至此版本及以上以获得更稳定的合并、变更与远程查询体验。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表