尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ClickHouse v25.10.5.40-stable 版本更新深度解读:关键修复、内存治理与刷新物化视图备份策略

ClickHouse v25.10.5.40-stable 版本更新深度解读:关键修复、内存治理与刷新物化视图备份策略 ClickHouse v25.10.5.40-stable 版本更新深度解读关键修复、内存治理与刷新物化视图备份策略【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHousev25.10.5.40-stable 是 ClickHouse 25.10 分支的一个稳定补丁版本在 CHANGELOG 中收录了 4 项功能改进、27 项用户可见缺陷修复、1 项构建/测试改进以及 8 项内部修复NOT FOR CHANGELOG / INSIGNIFICANT。本文以该版本更新日志为主体结合仓库源码逐条剖析核心变更的底层原理帮助运维与开发人员理解本次升级解决的关键问题、评估升级影响并掌握新增的备份配置项的用法。版本概览25.10 分支的第 5 个稳定补丁根据更新日志头部的元信息本版本基线为93e6f3ffcbd对比基准是 v25.10.4.104-stable5051266d584即这是 25.10 系列中的第 5 个 stable 补丁版本。整个更新日志按四类组织这也是 ClickHouse 发布流程的标准分类方式Improvement行为改进或新功能本版本共 4 项Bug Fix (user-visible misbehavior in an official stable release)官方稳定版中用户可见的缺陷修复本版本共 27 项是本次发布的主体Build/Testing/Packaging Improvement构建、测试、打包相关的改进共 1 项NOT FOR CHANGELOG / INSIGNIFICANT不进入对外变更说明、或影响极小的内部修复共 8 项。所有条目均通过Backported in ...标记了回溯合入backport的追踪号说明这些修复来自后续开发分支并已回归到 25.10 稳定线。一、功能改进Improvement1. 修复启用用户态页缓存userspace page cache时的虚假内存超限Fixed spurious memory limit errors when userspace page cache is enabled. (PR #91361)启用用户态页缓存后内存统计口径容易把缓存页面计入查询内存导致明明有充足内存却抛出MEMORY_LIMIT_EXCEEDED之类的虚假错误。该修复校正了内存限制计算与页缓存之间的统计关系避免在缓存命中场景下误杀查询。对于在生产环境开启用户态页缓存、且频繁遇到偶发内存超限报错的集群本次升级应能显著改善稳定性。2. 新增backup_data_from_refreshable_materialized_view_targets备份设置Introducedbackup_data_from_refreshable_materialized_view_targetsbackup setting to control whether to back up data of refreshable materialized views. Targets of RMVs with APPEND refresh strategy are always backed up. (PR #93658)这是本版本最值得关注的新增功能它控制了BACKUP命令是否备份可刷新物化视图Refreshable Materialized ViewRMV的目标表数据。从源码可以确认该配置的注册与默认值src/Backups/BackupSettings.h 中声明了字段bool backup_data_from_refreshable_materialized_view_targets false;即默认不备份RMV 目标表数据src/Backups/BackupSettings.cpp 通过M(Bool, backup_data_from_refreshable_materialized_view_targets)宏将其注册为可解析的备份设置项因此可在BACKUP语句中作为SETTINGS传入。其判定逻辑位于 src/Backups/BackupEntriesCollector.cpp 的BackupEntriesCollector::shouldBackupTableData()中if (backup_settings.structure_only) return false; if (!backup_settings.backup_data_from_refreshable_materialized_view_targets rmv_replace_target_ids.contains(StorageID{table_name.database, table_name.table})) { LOG_TRACE(log, Skipping table data for {} (a target of a refreshable materialized view), table_name.getFullName()); return false; } return true;从源码结构可以推断其行为语义当未开启该设置默认时若某张表是 RMV 的替换目标rmv_replace_target_ids命中其数据将被跳过、不写入备份仅备份结构一个例外是采用APPEND刷新策略的 RMV 目标表始终会被备份无论该设置如何因为 APPEND 策略下的目标表数据是增量累积的无法仅凭结构重建仅当structure_only打开时所有表数据都会被跳过优先级高于本设置。实际使用方式在BACKUP语句中显式开启BACKUP TABLE db.rmv_target TO Disk(backups, backup_rmv) SETTINGS backup_data_from_refreshable_materialized_view_targets 1;升级提示该设置默认值为false意味着升级到本版本后默认的备份将不再包含 RMV 目标表的数据。如果你的备份策略依赖这些表的数据需要在升级后显式开启此设置或确认 RMV 采用 APPEND 策略。3. 修复从表读取时部分场景不遵守内存限制In some cases weve seen ClickHouse doesnt respect a memory limit when reading from a table. This behaviour is fixed. (PR #93715)与第 1 项同为内存治理方向的修复。此前在某些读取路径下查询内存追踪存在缺口导致实际内存消耗突破配置的max_memory_usage。修复后读取表数据的路径会严格遵循内存限制避免 OOM 与节点级连锁故障。4. 检查请求check request字节大小计算的修正Do proper byte size calculation of the check request with stats. (PR #93907)修正了带统计信息的检查请求的字节大小计算属于协议/度量层面的精度修复避免因大小计算偏差导致的资源统计或限流异常。二、缺陷修复Bug Fix27 项用户可见修复全解析1. 列存储与稀疏列Sparse Columns相关修复本版本围绕子列subcolumn与稀疏列修复了多项读取与反序列化缺陷全部出自 Pavel Kruglov 之手说明该模块在 25.10 版本处于活跃演进期含点号的列名读取子列失败PR #87205对应 issue #81261、#82058、#88169当列名本身包含.字符时在某些情况下无法正确读取其子列本次修复了列名解析与子列寻址的歧义列别名中的动态子列解析PR #92583issue #91434在 Analyzer 中列别名里的动态子列此前会被包在getSubcolumn中某些场景下完全无法解析导致查询失败反序列化时直接提取子列到稀疏列PR #93512修复了反序列化过程中向 Sparse 列直接写入子列数据时的错误稀疏列场景下 TTL 更新失败PR #93619issue 报错Unexpected type of result TTL column部分输入格式在向 Sparse 列直接反序列化并执行 TTL 更新时会触发逻辑错误本次修复了 TTL 列的类型处理。这些修复共同指向一个主题子列如.*、JSON 动态子列与稀疏列存储格式的组合路径在 25.10 中逐渐成熟本次集中补齐了其中的边界缺陷。2. 聚合函数状态反序列化的安全加固本版本针对groupConcat聚合状态反序列化做了两次加固背景是恶意构造或损坏的聚合状态可能造成内存安全问题越界偏移导致崩溃PR #93028反序列化畸形的groupConcat聚合状态时偏移量越界会直接导致服务崩溃本次修复为崩溃问题整数溢出漏洞PR #93426groupConcat状态反序列化中的整数溢出可能引发内存安全问题属于安全性修复修复方式为对偏移量计算进行溢出保护与边界校验。这两项修复提示在从不可信来源加载聚合状态如反序列化 MergeTree 数据、处理外部传入的 state时数据校验至关重要。同时本版本还对uniqTheta在并行聚合max_threads 1默认开启下使用 UInt8 聚合键时的准确性做了修复PR #94095保证并行路径与串行路径结果一致。3. 关闭流程Shutdown相关的稳定性修复本版本集中修复了多个导致关闭挂起或崩溃的问题对滚动升级与日常维护意义重大服务器干净关闭时因析构顺序错误崩溃PR #90076issue #82420修复了 clean shutdown 过程中对象析构顺序不当导致的崩溃后台调度池终止挂起PR #93008终止后台调度池background schedule pool时可能挂起进而导致服务器关闭时 hang本次修复该问题ZooKeeper 关闭时未完成 finalizePR #93602确保 ZooKeeper 在关闭时被正确 finalize修复极少数情况下的关闭挂起SCOPE_EXIT与抛异常函数混用PR #94100socket.setBlocking(true)在SCOPE_EXIT中抛异常导致服务异常。原因是SCOPE_EXIT创建作用域守卫对象并在其析构函数中执行代码不能在会抛异常的函数中使用应改用SCOPE_EXIT_SAFE。这是一条重要的工程实践析构函数路径必须保证不抛出异常ZooKeeper 客户端连接时的隐蔽缺陷PR #94320修复了 ZooKeeper 客户端在连接过程中的一个隐蔽 bug该 bug 会导致挂起hung与崩溃。4. 解析器与函数引擎的崩溃修复GenerateRandom 引擎非字面量参数崩溃PR #88157此前对非字面量参数会抛出LOGICAL_ERROR直接崩溃本次改为返回带清晰消息的BAD_ARGUMENTS错误——这是从内部错误到用户输入错误的正确语义降级randomStringUTF8整数溢出崩溃PR #90326在超大长度参数下发生整数溢出导致崩溃。关于后者可以从 src/Functions/randomStringUTF8.cpp 看到修复后的防护逻辑executeImpl在分配内存前会先遍历参数统计总码点数并校验上限const size_t max_total_codepoints 1ULL 29; for (size_t row_num 0; row_num input_rows_count; row_num) { size_t codepoints col_length.getUInt(row_num); if (codepoints max_total_codepoints - total_codepoints) throw Exception(ErrorCodes::TOO_LARGE_STRING_SIZE, Too large string size in function {}, getName()); total_codepoints codepoints; }即对总码点数而非单行长度做1ULL 29的上限校验累计超限即抛出TOO_LARGE_STRING_SIZE从根源上避免后续total_codepoints * 4字节预留时的整数溢出。该函数只生成已分配assigned的 Unicode 平面码点排除 4–13 平面每个码点预期约 3.85 字节因此按 4 倍预留不会造成明显浪费。5. 查询正确性与 JOIN 修复标量相关子查询下未用列被错误移除PR #93273修复了存在标量相关子查询时子查询未用列的错误裁剪——此前若某列仅被相关子查询使用可能被优化器移除导致查询报NOT_FOUND_COLUMN_IN_BLOCK错误嵌套 RIGHT JOIN 结果错误PR #94339issue #93891开启enable_lazy_columns_replication时嵌套 RIGHT JOIN 的复制列会错误地全部返回同一个值而非各自的值本次修复保证列复制与 JOIN 语义正确。6. 备份恢复与物化视图ReplicatedMergeTree 恢复时去重竞争导致 LOGICAL_ERRORPR #93612恢复restoreReplicatedMergeTree 时存在去重竞争可能触发LOGICAL_ERROR本次修复刷新物化视图内存泄漏PR #94200使用包含多个子查询的SELECT的刷新物化视图存在内存泄漏本次修复物化视图中表函数求值的数据竞争PR #94171修复了在物化视图中求值表函数时的数据竞争。7. 权限与安全merge表引擎绕过SHOW COLUMNS权限PR #93695此前用户可通过merge表引擎获取表列清单而无需SHOW COLUMNS权限本次修复该权限绕过忽略带 grant option 的数据库级全局授权不可能撤销PR #94386修复了对带GRANT OPTION的全局授权在数据库级别执行不可能撤销revoke时的处理逻辑。8. 存储、缓存与 IO解压缓冲区大小校验PR #93690校验解压后缓冲区大小是否符合预期防止解压路径上的异常数据造成越界或逻辑错误ReadWriteBufferFromHTTP未初始化值使用PR #94058修复 HTTP 读写缓冲区中使用未初始化值的问题use-of-uninitialized-valueDataPartStorageOnDiskBase::remove与system.parts的数据竞争PR #94262issue #49076修复数据部分删除与system.parts系统表读取之间的数据竞争FilesystemCacheSizeLimit度量在 SLRU 策略下取值错误PR #94363当本地缓存策略配置为SLRU时当前度量FilesystemCacheSizeLimit的数值不正确本次修复。9. 表函数与数据库引擎PostgreSQL 数据库引擎空指针解引用PR #94180issue #92887当查询不正确时PostgreSQL数据库引擎可能发生空指针解引用nullptr dereference本次修复。三、构建/测试/打包改进本版本仅包含一项打包层面的改进升级 c-ares 至 v1.34.6PR #94129c-ares 从 v1.34.5 升至 v1.34.6以解决 c-ares 的CVE-2025-62408。更新日志特别注明该 CVE与 ClickHouse 无关not relevant for ClickHouse属于防御性依赖升级但依赖链的安全性因此得到改善。四、内部修复NOT FOR CHANGELOG / INSIGNIFICANT以下 8 项属于不进入对外变更说明或影响极小的内部修复但仍有参考价值变更PR说明修复 GCS 的 Bearer token 刷新#89183保证长生命周期备份/读取任务的令牌刷新正确AggregateFunctionWindowFunnel更遵守内存限制#93035窗口漏斗聚合在内存限制下更受控远端限流器休眠时间不再依赖本地 socket 超时默认上限 20 秒#93410隔离限流等待与 socket 超时的耦合JSON 列新增额外校验#93453加固 JSON 列的数据校验路径消除test_projection_rebuild_uses_only_required_columns的偶发失败#93498测试稳定性改进修复 Prometheus Remote Read 协议支持#93791保证 Prometheus 远程读协议的兼容性修复异常消息#93915错误提示文案修正修复merge表引擎相关权限问题#93695与上文权限修复同源其中远端限流器remote throttler的改动值得注意限流等待时长此前受本地 socket 超时影响可能被意外拉长或缩短现在独立计算并默认封顶 20 秒这有助于分布式查询在限流场景下保持稳定的行为。五、升级评估与落地建议综合本次更新内容v25.10.5.40-stable 的升级收益集中在以下四个方向内存治理用户态页缓存虚假超限#91361、读表路径不遵守内存限制#93715、AggregateFunctionWindowFunnel内存限制#93035三项修复显著降低内存误判与 OOM 风险关闭与高可用稳定性析构顺序#90076、后台调度池挂起#93008、ZooKeeper finalize#93602、ZooKeeper 客户端连接#94320四项修复让滚动升级和优雅停机更可靠数据安全加固groupConcat聚合状态反序列化的越界#93028与整数溢出#93426修复建议关注任何从不可信来源加载聚合状态的场景备份行为变更新增backup_data_from_refreshable_materialized_view_targets设置且默认关闭见 src/Backups/BackupSettings.h升级后 RMV 目标表数据默认不再进入备份使用 RMV 且依赖数据备份的团队务必评估并显式开启。此外若你的查询大量使用子列含.的列名、JSON 动态子列、稀疏列存储或 TTL 更新建议在升级后针对这些路径补充回归测试若使用嵌套 RIGHT JOIN 且开启enable_lazy_columns_replication也建议重点验证#94339。完整的条目清单与追踪信息可在 v25.10.5.40-stable 更新日志 中查阅各修复对应的底层实现可进一步参考 BackupEntriesCollector.cpp、BackupSettings.cpp 与 randomStringUTF8.cpp 等源码文件。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表