尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ClickHouse v23.2.5.46-stable 发布指南:变更清单、优化器回移植与 Bug 修复详解
ClickHouse v23.2.5.46-stable 发布指南变更清单、优化器回移植与 Bug 修复详解【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本文围绕 ClickHouse 官方变更日志 docs/changelogs/archive/v23.2.5.46-stable.md 展开完整解读 v23.2.5.46-stable构建号 b50faecbb12基线为 v23.2.4.12-stable构建号 8fe866cb035这一 LTS 分支点版本的全部变更1 项功能改进、2 项构建/测试/打包改进、9 个用户可见的 Bug 修复以及 9 项不面向用户的内部修复。读完本文你将了解每个变更的实际影响面、涉及的源码模块位置以及作为运维者在升级 23.2 LTS 版本时应重点关注的行为变化尤其是逻辑表达式优化器在别名场景下的禁用、zero-copy 复制修复和 systemd 启动兼容性。版本概览一个以回移植修复为主的稳定版本v23.2.5.46-stable 属于 23.2 分支2023 年发布的 LTS 线上的一个增量稳定版本。从变更日志的结构看它不含新功能Feature主体是三类内容类别数量典型条目Improvement改进1修复物化视图 ATTACH 时因依赖表缺失导致的UNKNOWN_TABLE异常Build/Testing/Packaging构建/测试/打包2CI 改用 sccache S3 缓存keeper 镜像增加无后缀 tagBug Fix用户可见修复9过期角色修改、zero-copy 磁盘选择、CROSS JOIN algorithmauto 等NOT FOR CHANGELOG内部修复9systemd 服务文件注释、ReplicatedMergeTree attach 报错信息等对运维和开发者的实际意义这是一个可以低风险的升级版本——所有条目要么是明确的 Bug 修复要么只影响构建与部署方式不涉及查询语义变更。改进项物化视图 ATTACH 不再因依赖表缺失而失败UNKNOWN_TABLE 异常修复PR #47975由 #48164 回移植变更日志原文FixedUNKNOWN_TABLEexception when attaching to a materialized view that has dependent tables that are not available. This might be useful when trying to restore state from a backup.这条改进修复的场景非常具体当你用ATTACH恢复一个物化视图Materialized View而该视图所依赖的下游目标表此时尚不存在或不可用时ClickHouse 之前会抛出UNKNOWN_TABLE异常导致 ATTACH 失败。修复后 ATTACH 不再因依赖表缺失而中断。变更日志明确点出了核心使用场景——从备份恢复状态。这直接对应 ClickHouse 的 BACKUP/RESTORE 语义恢复过程中对象是按依赖顺序逐个 ATTACH 的物化视图的依赖表可能晚于视图本身被恢复在依赖表就位之前视图的 ATTACH 应当允许“带伤存活”而不是整条恢复链被打断。从源码结构看这一类逻辑位于src/Storages/StoredObjectDependencyVisitor与src/Storages/StorageMaterializedView的 ATTACH 路径StorageMaterializedView::recover会在依赖就绪后重新拉起视图。该 PR 在 23.2 分支以 backport 形式合入#48164 是 backport PR 单号#47975 是原始 PR 单号说明该问题也存在于更新的分支并先在主线修复。构建与打包改进sccache 取代 ccache并使用 S3 作为缓存后端PR #46240由 #48216 回移植这是 CI 构建体系的改进ClickHouse 官方构建流水线改用 sccache 替代 ccache并将编译缓存放在 S3 远端。对使用官方预编译包的用户没有直接行为影响但它意味着官方构建产物的缓存一致性更好、构建更快。对自编译用户sccache 的工作方式是 ccache 的超集替代支持远端存储可以作为自编译加速的参考方案。clickhouse/clickhouse-keeper镜像开始推送无后缀 tagPR #48236由 #48256 回移植此前clickhouse-keeper的 Docker 镜像只带-alpine后缀推送例如latest-alpine。此版本起同一个镜像也会以无后缀的 tag如latest推送。仓库中 docker/keeper/Dockerfile.alpine 的头两行注释印证了这一机制# The Dockerfile.ubuntu exists for the tests/ci/docker_server.py script # If the image is built from Dockerfile.alpine, then the -alpine suffix is added automatically,即构建系统根据使用的 Dockerfile 自动决定是否追加-alpine后缀。对使用者而言docker pull clickhouse/clickhouse-keeper:latest从此可以直接拿到与latest-alpine相同的内容已有的-alpinetag 不受影响两者语义一致。Bug 修复九项用户可见行为变更逐一解析以下九项是变更日志 “Bug Fix (user-visible misbehavior in an official stable release)” 分组的全部内容按变更日志原始顺序逐条说明。1. 修复修改已过期角色的问题PR #46772修改一个已过VALID UNTIL时间的角色Role时之前的处理逻辑存在缺陷。相关实现位于访问控制模块 src/Access/AuthenticationData.cpp其中valid_until的解析、编码与setValidUntil调用贯穿CREATE ROLE/ALTER ROLE的执行路径文件中getValidUntilFromAST负责把VALID UNTIL字面量或 interval 解析为时间戳。修复后对过期角色执行ALTER ROLE ... SET VALID UNTIL ...等修改操作能正确生效而不是被旧的过期状态“粘住”。2. 修复 fetch 阶段 zero-copy 复制的磁盘选择错误PR #47010在使用zero_copy 1的 ReplicatedMergeTree 表上副本间 fetch 数据分片part时会从对象存储的共享目录读取此版本之前选择本地落盘磁盘的逻辑有缺陷可能把 part 写到与期望不一致的磁盘上。该问题涉及src/Storages/StorageReplicatedMergeTree的 fetch 路径与磁盘配置解析。对使用 S3/OSS 共享存储 zero-copy 的部署升级此版本可消除潜在的 part 放置错乱风险。3. 修复 CROSS JOIN 在join_algorithm auto下的 NOT_IMPLEMENTED 报错PR #47068此前显式CROSS JOIN在join_algorithm auto时会走到一个未被实现的算法分支直接抛NOT_IMPLEMENTED错误。从源码结构看CROSS JOIN 在计划器中被视为带常量谓词的 join最终收敛到ConstantJoin执行——src/Planner/PlannerJoins.cpp 中的注释明确写着We have only one way to execute a CROSS JOIN and joins with constant predicate - withConstantJoin.修复保证了显式 CROSS JOIN 或常量谓词 join 不会因为 auto 算法选择而失败。受影响的用户只需把join_algorithm从auto切回固定算法如parallel即可规避但升级此版本后auto可以安全使用。4. 对含别名的表达式禁用逻辑表达式优化器PR #47451这是本版本最需要开发者留意的一条当谓词表达式中引用了别名alias时Analyzer 的逻辑表达式优化器被禁用。该优化器是 Analyzer 查询树的一个 pass实现于 src/Analyzer/Passes/LogicalExpressionOptimizerPass.cpp。它做的事情包括将嵌套的and/or链展平getFlattenedLogicalExpression对x c1 AND x c2这类等值/比较链做归并依赖设置项optimize_min_equality_disjunction_chain_length、optimize_min_inequality_conjunction_chain_length提取公共子表达式optimize_extract_common_expressions、比较链化简optimize_and_compare_chain与冗余比较消除optimize_redundant_comparisons。问题在于当谓词参数是查询内定义的别名时别名到列的解析依赖执行期的上下文而优化 pass 在解析别名之前/期间做改写可能产生错误的语义。该修复采取保守策略——检测到别名即跳过该 pass用正确性换取该场景下的少量优化收益。对使用者的可观察影响是同一查询在涉及别名的复杂布尔谓词场景下计划可能回退到未优化形态若观察到执行计划变化可与此条目对照排查。5. 修复查询参数query parameters相关缺陷PR #47488修复{param:Name}形式查询参数替换路径上的 bug。查询参数支持在 SQL 中以{x:UInt64}语法引用外部传入的参数解析逻辑位于 src/Parsers 的查询参数相关解析器中。此条目在变更日志中未给出细节属于该机制在 23.2 分支上的一次通用正确性修复。6. 参数化视图parameterized views缺陷修复PR #47495关联 issue #47287 / #47247修复CREATE VIEW ... (x) AS ...参数化视图在使用时的两类缺陷PR 标题 “Parameterized view bug fix 47287 47247” 直接关联两个 issue 编号。参数化视图是较新引入的特性23.2 分支上仍属回移植范畴使用该特性的用户建议升级到本版本以规避已知的参数展开错误。7. Parquet 读取 bug 的正式修复并恢复此前被回退的代码PR #47538关联 issue #45878标题 “Proper fix for bug in parquet, revert reverted” 信息量很大此前针对某个 Parquet 读取 bug 的修复PR #45878 相关曾引起回归而被回滚revert本版本给出的是正式修复并把被回滚的部分重新合入revert reverted。对从 Parquet 外表/file()函数读取数据的用户这是一次明确的正确性修复值得在升级后对既有 Parquet 导入任务做一次抽查。8. 修复 move 操作期间 zero-copy 锁的等待问题PR #47631与第 2 条同属 zero-copy 子系统执行ALTER TABLE ... MOVE PART等操作时代码需要正确等待 zero-copy 相关锁修复前存在锁等待逻辑缺陷可能引发 part 移动与共享存储状态竞争。与第 2 条一起本版本对 zero-copy 部署整体更可靠。9. HTTP 接口日志告警过吵的热修复PR #47903“Hotfix for too verbose warnings in HTTP”HTTP 接口在特定请求如客户端提前断开、非标准请求头下会打印过多 WARN 级别日志本条目是降噪热修复。对运维的直接收益是日志量下降避免磁盘与日志检索压力。内部修复NOT FOR CHANGELOG不影响行为但值得了解的九项变更日志将其单独分组为 “NOT FOR CHANGELOG / INSIGNIFICANT”以下按原文顺序完整列出keeper systemd 服务文件中的非法行内注释PR #47105clickhouse-keeper的 systemd 单元文件中EnvironmentFile-/etc/default/%p一行原先带有行内注释而 systemd 的EnvironmentFile不支持#行内注释会按字面解析。仓库内的单元文件 packages/clickhouse-keeper.service 中可以看到当前形态——注释放在独立行上、EnvironmentFile-/etc/default/%p保持干净与本条修复一致。ReplicatedMergeTreeAttachThread 报错信息改善PR #47454attach 线程失败时给出更可诊断的错误信息便于排障无行为变化。修复00933_test_fix_extra_seek_on_compressed_cache在 release 分支的失败PR #47490compressed cache 多 seek 测试在发布分支上通过。修复旧版本 systemd 上的启动问题PR #47689单元文件使用的 systemd 特性在较老版本的 systemd 上不可用本条提升了对老发行版如 CentOS 7 系的启动兼容性。使用 RPM 部署 keeper/server 的用户可参考 packages/clickhouse-keeper.service 与 packages/clickhouse-server.service 的单元定义确认自身 systemd 版本支持其中全部指令。为没有已创建 PR 的 backport 分支加保护PR #47760CI 层面防止无 PR 的 backport 分支误入发布流程。仅有效的 Reviews.STATES 覆盖已有 reviewPR #47789CodeReview 机器人行为修正避免无效状态覆盖人工 review。将提前返回置于大代码块之前并改善日志PR #47822可读性/日志改进。CI 产物 S3 前缀PR #47945CI 构建产物在 S3 上的存放前缀调整属于发布管线内部组织。修复 TSAN 报告的锁顺序反转lock-order-inversionPR #47953线程卫生层面消除 TSAN 告警属并发正确性加固不改变用户可见行为。升级建议与验证要点基于上述变更清单给出针对 23.2.x 用户的升级判断建议升级到 v23.2.5.46-stable 的典型场景使用 BACKUP/RESTORE 且涉及物化视图依赖表恢复本版本改进项 1使用 zero-copy 复制本版本包含 2 项 zero-copy 相关修复在join_algorithm auto下使用 CROSS JOIN 遇到NOT_IMPLEMENTED通过 Docker 拉取clickhouse-keeper且希望直接使用无后缀 tag依赖参数化视图或{param:}查询参数的应用。升级后需要留意的行为变化涉及别名的布尔谓词不再经过逻辑表达式优化 passBug Fix 4执行计划与耗时可能与之前版本不同建议对比EXPLAIN输出Parquet 读取行为随正式修复变更建议对存量 Parquet 任务做抽样验证。验证方式升级后可用SELECT version()确认运行版本为 23.2.5.46对 systemd 部署可检查单元文件是否包含上文提到的EnvironmentFile修正对 Docker 部署docker pull clickhouse/clickhouse-keeper:latest应与:latest-alpine内容一致。小结v23.2.5.46-stable 是 23.2 LTS 分支上一个典型的“纯修复”稳定版本以物化视图 ATTACH 的可用性改进打头核心是九项覆盖访问控制、zero-copy、join 计划、Analyzer 优化器、Parquet 读取与 HTTP 日志的用户可见 Bug 修复外加九项构建、systemd 与 CI 层面的内部加固。变更日志原文的完整条目以 docs/changelogs/archive/v23.2.5.46-stable.md 为准本文在此基础上结合仓库中 LogicalExpressionOptimizerPass 实现、PlannerJoins 的 CROSS JOIN 执行约束、keeper 单元文件 与 keeper Dockerfile 给出了各条变更的源码落点与操作指引便于开发者逐条核对、评估与回归验证。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

解决BLAST报错:FASTA格式不匹配问题详解

解决BLAST报错:FASTA格式不匹配问题详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/14 16:53:08
动态进制优化算法在图像二进制转换中的应用

动态进制优化算法在图像二进制转换中的应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/14 16:53:08
AI智能体与数据仪表盘的核心差异及技术架构解析

AI智能体与数据仪表盘的核心差异及技术架构解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/14 16:48:08
MORE NEWS

更多资讯

📰

React Native在OpenHarmony平台的NFC开发指南

1. React Native与OpenHarmony的NFC开发概述在移动应用开发领域,近场通信(NFC)技术正变得越来越重要。作为OpenHarmony生态的重要组成部分,NFC功能可以为用户提供便捷的交互体验。本文将详细介绍如何在React Native应用中实现OpenHarmony平台的NFC功能。…

📰

使用 MCP Toolbox 搭建 AlloyDB for PostgreSQL MCP Server:配置、认证与数据库运维实战

使用 MCP Toolbox 搭建 AlloyDB for PostgreSQL MCP Server:配置、认证与数据库运维实战 【免费下载链接】mcp-toolbox MCP Toolbox for Databases is an open source MCP server for databases. 项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox …

📰

Kubernetes集群运维实践:从安装到生产部署

Kubernetes集群运维——从安装到生产部署写这篇东西的起因,是最近连续帮几个团队梳理Kubernetes集群,发现大家普遍卡在同一个地方:集群是装上去了,Pod也跑起来了,但离“生产可用”还差一大截。有的是资源配额完全没规划…

📰

Netty管道机制:Head、Tail与ChannelInitializer解析

1. Netty管道机制的核心设计在Netty的网络通信框架中,管道(Pipeline)机制是实现事件处理和业务逻辑的核心架构。理解Head和Tail这两个内置处理器与ChannelInitializer的关系,需要先深入掌握Netty管道的基本工作原理。每个新建立的…

📰

Pandas DataFrame核心技术与数据分析实战指南

1. Pandas DataFrame:数据分析的基石工具DataFrame作为Pandas库的核心数据结构,已经成为现代数据分析的标准工具。这种二维表格结构完美融合了SQL表的灵活性和Excel电子表格的直观性,同时提供了强大的编程接口。我在处理电商用户行为数据时&a…

📰

如何把 NOS Town Groq 运行时接入 Gas Town 编排核心?

如何把 NOS Town Groq 运行时接入 Gas Town 编排核心? 【免费下载链接】gastown Gas Town - multi-agent workspace manager 项目地址: https://gitcode.com/GitHub_Trending/ga/gastown 如果你已经装好 Gas Town 编排核心,想把各角色&#xff08…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬