ARTICLE DETAIL

资讯详情

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

ClickHouse v25.5.7.52-stable 发布说明:性能优化、Keeper 后台迁移与关键 Bug 修复全景解析

ClickHouse v25.5.7.52-stable 发布说明:性能优化、Keeper 后台迁移与关键 Bug 修复全景解析 ClickHouse v25.5.7.52-stable 发布说明性能优化、Keeper 后台迁移与关键 Bug 修复全景解析【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse导读本文基于 ClickHouse 官方稳定版本发布日志深入解析 v25.5.7.52-stablecommit6e66ab95d8a相对上一稳定版 v25.5.6.14-stable 的全部变更内容。该版本属于 v25.5 LTS 系列的安全维护与 bugfix 迭代聚焦 QueryTree 哈希性能加速、Keeper 变更日志异步迁移、分布式 DDL 复制延迟控制、S3/Azure 对象存储兼容性修复等核心议题。读完本文你将掌握本版本新增的 1 项性能改进、3 项功能增强、16 项用户可见 Bug 修复、2 项构建/安全改进以及每个变更对应的源码实现位置与使用建议可直接用于升级评估和故障排查。版本概览v25.5.7.52-stable 是 ClickHouse v25.5 稳定分支的第七个维护版本与 v25.5.6.14-stable 相比本次更新包含Performance Improvement性能改进1 项加速 QueryTree 哈希计算Improvement功能增强3 项覆盖 Keeper、clickhouse-benchmark、system.s3queue_log与分布式 DDLBug Fix用户可见问题修复16 项涉及对象存储、查询分析器、备份恢复、认证、内存管理等多个模块Build/Testing/Packaging Improvement构建与安全2 项包含 Poco 库的 CVE 修复NOT FOR CHANGELOG内部与轻微变更2 项。本版本所有变更均通过 GitHub 上的 backport 机制合入每个条目均标注了对应的 backport issue 与原始 PR 编号属于典型的稳定分支修复发布不引入破坏性功能变更适合生产环境在充分测试后升级。性能改进QueryTreeHash 加速变更内容本次版本最重要的性能改进来自 PR #82617Nikolai Kochetov目标是尝试加速 QueryTreeHash 的计算。该变更通过 backport issue #83341 合入本版本。源码级原理QueryTreeHash 是 ClickHouse 新版分析器Analyzer中用于对查询树节点进行哈希的核心机制。在 src/Analyzer/HashUtils.h 中可以看到其设计template typename QueryTreeNodePtrType, bool compare_aliases true struct QueryTreeNodeWithHash { QueryTreeNodeWithHash(QueryTreeNodePtrType node_) /// NOLINT : node(std::move(node_)) , hash(node-getTreeHash({.compare_aliases compare_aliases})) {} QueryTreeNodePtrType node nullptr; CityHash_v1_0_2::uint128 hash; };该结构同时保存查询树节点指针及其uint128类型的 CityHash 哈希值可作为unordered_map/unordered_set的键避免在容器操作中反复重算哈希。例如QueryTreeNodePtrWithHashSet、QueryTreeNodeConstRawPtrWithHashSet等类型别名都基于该结构。从源码结构看查询树哈希被广泛应用于查询去重与公共子表达式CTE识别查询缓存 key 计算EXPLAIN输出中的节点标识。由于大型查询中哈希计算会高频触发本次对该过程的微优化能在查询分析阶段带来可感知的耗时下降尤其对包含大量重复子树的复杂分析型查询收益更明显。功能增强详解Keeper变更日志文件后台线程迁移变更内容KeeperClickHouse 内置的 ZooKeeper 替代实现现在在后台线程中执行 changelog 文件在不同磁盘之间的迁移PR #82485Antonio Andelicbackport #83014。问题背景此前将 changelog 迁移到另一块磁盘时会全局阻塞 Keeper直到迁移完成。当目标磁盘是 S3 等慢速存储时迁移操作耗时长会造成明显的性能退化。本次修改将移动操作移至后台线程迁移期间 Keeper 不再被整体阻塞消除了长迁移对服务可用性的影响。适用场景将 Keeper 数据文件snapshots 与 changelogs分层存储例如冷数据下沉到 S3 磁盘的混合存储部署是本改进的直接受益者。clickhouse-benchmark修复 --reconnect 默认值变更内容修复了clickhouse-benchmark中--reconnect选项的错误默认值PR #82677Alexey Milovidovbackport #83268。该默认值在 PR #79465 中被误改。从 programs/benchmark/Benchmark.cpp 的源码可以看到该参数的完整语义(reconnect, valuesize_t()-default_value(0)-implicit_value(1), control reconnection behaviour: 0 (never reconnect), 1 (reconnect for every query), or N (reconnect after every N queries); when given without a value, behaves as 1)即--reconnect的正确语义是0从不重连默认值1每条查询后重连N每 N 条查询后重连不带值使用时按1处理。在基准测试中重连行为会影响连接建立开销与测试结果分布本修复确保了未显式指定时默认“永不重连”恢复与文档一致的行为。system.s3queue_log 新增提交信息列变更内容为system.s3queue_log系统表新增commit_time、commit_id两列PR #83016Kseniia Sumarokovabackport #83152。实现证据在 src/Storages/ObjectStorageQueue/StorageObjectStorageQueue.cpp 中提交逻辑生成了commit_id通过generateCommitID()与commit_time当前系统时钟const auto commit_id generateCommitID(); const auto commit_time std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); ... insert_succeeded, commit_id, commit_time, transaction_start_time, exception_message,使用价值S3Queue 引擎基于对象存储的队列表引擎运维人员现在可以精确追踪每次成功提交的对象批次commit_id分析提交耗时对比commit_time与transaction_start_time排查对象处理延迟与重复处理问题。分布式 DDL按复制延迟等待副本变更内容当distributed_ddl_output_mode*_only_active时不再等待那些复制延迟超过max_replication_lag_to_enqueue的新副本或恢复中的副本PR #83302Alexander Tokmakovbackport #83634。问题背景新副本加入或完成初始化/恢复后若其复制日志replication log积压巨大会导致DDL task is not finished on some hosts错误。因为*_only_active模式等待所有 active 副本执行完 DDL而新副本虽然 active 但复制积压尚未消化。修复方案本版本在以上场景中跳过延迟过大的副本避免 DDL 被长时间阻塞同时新增SYSTEM SYNC DATABASE REPLICA STRICT查询用于显式等待复制日志积压降到max_replication_lag_to_enqueue以下。max_replication_lag_to_enqueue的参数定义位于 src/Databases/DatabaseReplicatedSettings.cppDECLARE(NonZeroUInt64, max_replication_lag_to_enqueue, 50, Replica will throw exception on attempt to execute query if its replication lag greater. Must be greater than 0, 0)类型NonZeroUInt64默认值50指 replication queue 中积压条目数阈值语义副本的复制延迟大于该值时执行查询将抛出异常。操作示例SYSTEM SYNC DATABASE REPLICA STRICT的语法定义可见 src/Parsers/ParserSystemQuery.cpp用法为SYSTEM SYNC DATABASE REPLICA STRICT replicated_database_name;该命令适用于在新副本初始化后、正式承接分布式 DDL 流量前主动确认其复制进度追赶到位。Bug Fix16 项用户可见问题修复查询执行与 SQL 语义5 项except_default_mode重写中的异常安全性PR #82820Alexey Milovidov修复union/intersect/except_default_mode重写过程中的异常安全问题关闭 issue #82664。Merge 引擎 JOIN 过滤器修改PR #82950Dmitry Novik修复包含Merge存储引擎表的 JOIN 表达式中过滤器被错误修改的问题关闭 issue #82092。启用分析器时 VIEW 全列读取的性能退化PR #83036Dmitry Novik修复开启新分析器时二级查询总是从 VIEW 读取所有列导致的性能退化关闭 issue #81718。CTE 同名引用导致的TOO_DEEP_SUBQUERIESPR #83413Dmitry Novik修复 CTE 定义引用同名表表达式时误报TOO_DEEP_SUBQUERIES异常的问题。INSERT SELECT与UNION ALL的空指针解引用PR #83643Alexey Milovidov修复INSERT SELECT搭配UNION ALL在极端场景下可能导致的空指针解引用崩溃关闭 issue #83618。对象存储与外部表5 项外部表引擎缓存缓冲区边界对齐PR #82493Kseniia Sumarokova修复外部表引擎中缓存缓冲区的边界对齐禁用逻辑该逻辑在 PR #81868 中被破坏。AzureBlobStorage 原生复制认证回退PR #82693Smita KulkarniAzureBlobStorage 原生复制native copy在比较认证方式时若抛出异常现在会回退到「读取复制」的非原生复制路径提高复制操作的健壮性。S3 客户端no_sign_request修复PR #83379bool no_sign_request false;适用于访问公开只读 S3 存储桶如公共数据集时避免无谓的签名计算。Iceberg 数组/映射边界剪枝禁用PR #83520Daniil Ivanik禁用 Iceberg 表引擎对数组元素与 Map 值含全部嵌套子字段的基于边界的文件剪枝避免错误剪枝导致数据缺失。只读磁盘上恢复备份的误导性报错PR #83051Julia Kartseva修复在只读磁盘上执行备份恢复时的误导性错误消息让报错更准确地反映磁盘只读这一根因。认证与数据安全1 项SCRAM-SHA-256 认证 salt 修复PR #82888 与 src/Access/AuthenticationData.cpp。该修复保证了 SCRAM-SHA-256 凭据在 DDL如CREATE USER ... IDENTIFIED WITH SCRAM_SHA256_PASSWORD BY ...往返解析后仍能正确验证。低层运行时与内存4 项QueryMetricLog 的Mutex cannot be NULLPR #82979Pablo Marcos修复查询指标日志记录中互斥锁为空的LOGICAL_ERROR。max_threads1下 CPU 调度导致的崩溃PR #83387Fan Ziqi修复启用 CPU 调度cgroups CPU scheduling且max_threads1时高负载下可能发生的崩溃。max_untracked_memory周围的内存计算错误PR #83607Azat Khuzhin修复max_untracked_memory附近不正确的内存计算避免内存追踪与限制判断出现偏差。estimateCompressionRatio()死循环PR #83704Azat Khuzhin修复block_size_bytes0时estimateCompressionRatio()陷入死循环的问题。其他1 项共享字典lowCardinalityKeys错误使用无关部分PR #83118Alexey Milovidov修复lowCardinalityKeys函数在共享字典场景下错误使用无关字典部分的问题。构建 / 测试 / 打包改进Poco 库 CVE-2025-6375 修复PR #82647Konstantin Bogdanov从 Poco 上游合入 CVE-2025-6375 的修复补丁。Poco 是 ClickHouse 的基础 C 库位于 contrib/poco为网络、JSON、XML、Redis 等模块提供底层支持因此该安全修复影响面覆盖多个网络相关组件。Poco 内嵌 expat 升级至 2.7.1PR #82661Konstantin Bogdanov将 Poco XML 模块使用的expat解析器升级到 2.7.1修复 XML 解析相关的潜在问题。内部与轻微变更dateTrunc行为保留设置PR #82530Pavel Kruglov新增一个设置用于保留dateTrunc函数的旧行为为兼容性过渡提供开关。集成测试恢复--pre-pull命令PR #83528Mikhail f. Shiryaev恢复集成测试任务中在 PR #73291 被误删的--pre-pull命令。升级与验证建议升级路径v25.5.7.52-stable 属于 v25.5 稳定分支的维护版本可在 docs/changelogs 目录中按版本追溯完整变更历史升级前建议先在预发环境执行功能回归重点覆盖本文涉及的对象存储S3/Azure、S3Queue、Keeper、分布式 DDL 与 SCRAM 认证等模块。S3 公桶访问若你使用公开只读 S3 数据源可评估no_sign_request设置含 endpoint 级配置以简化访问注意该配置修复属于本版本新增能力。分布式 DDL 运维使用distributed_ddl_output_mode*_only_active的集群可在副本恢复后执行SYSTEM SYNC DATABASE REPLICA STRICT主动确认复制追赶到位避免DDL task is not finished on some hosts误报。基准测试脚本若你的压测脚本依赖--reconnect的旧默认值行为升级clickhouse-benchmark后请显式传参--reconnect 1或--reconnect N确保测试意图明确。监控增强升级后可通过system.s3queue_log的commit_id/commit_time列对 S3Queue 的提交批次进行精细化追踪与分析。总结v25.5.7.52-stable 是一个内容扎实的维护版本在性能侧优化了 QueryTreeHash 计算路径在可用性侧让 Keeper 的 changelog 磁盘迁移不再阻塞服务、并为分布式 DDL 增加了复制延迟感知的等待策略与SYSTEM SYNC DATABASE REPLICA STRICT新命令在正确性侧一次性修复了 16 项用户可见问题覆盖查询分析器、对象存储、认证与内存管理等多个关键模块同时完成了 Poco/expat 的安全升级。对于运行 v25.5 系列的 ClickHouse 用户这是一个值得纳入升级评估的版本。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表