ARTICLE DETAIL

资讯详情

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

ClickHouse v25.10.3.100-stable 发布详解:Alias 引擎实验化、文件缓存改进与关键 Bug 修复

ClickHouse v25.10.3.100-stable 发布详解:Alias 引擎实验化、文件缓存改进与关键 Bug 修复 ClickHouse v25.10.3.100-stable 发布详解Alias 引擎实验化、文件缓存改进与关键 Bug 修复【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse导读本文基于 ClickHouse 官方变更日志 docs/changelogs/v25.10.3.100-stable.md全面解读 v25.10.3.100-stable 版本的核心变更Alias表引擎正式转入实验特性、文件系统缓存filesystem cache监控与清理策略的多项改进以及覆盖查询分析器、数据序列化、合并任务、对象存储备份等数十项用户可见的 Bug 修复。读完本文你将掌握该版本每类变更的适用场景、涉及的核心设置与底层实现依据能够据此评估升级风险并快速定位相关问题的修复行为。版本概览v25.10.3.100-stable 是 ClickHouse 25.10 系列的一个补丁patch稳定版基于 v25.10.2.65-stable 演进而来。变更日志按官方惯例分为四类分类数量关注点Experimental Feature1Alias表引擎实验化需显式开关启用Improvement5文件缓存监控、S3Queue 清理、S3 XML 解析重试、guardrails 告警Bug Fix30覆盖 JOIN/ARRAY JOIN、分析器、序列化、MergeTree 合并、向量函数、备份等Build/Testing/Packaging3升级 icu、curl、libarchive 依赖其中所有变更均为先前开发版本的回移植backport因此本版本的关注重点是稳定性收敛而非新功能扩张。Experimental FeatureAlias表引擎转入实验特性本版本最值得注意的变更是把Alias表引擎标记为实验特性Experimental Feature只有显式设置allow_experimental_alias_table_engine1才能使用相关实现见 PR #89712作者 Kai Zhu。从源码看Alias存储引擎是一个轻量级的表指针它本身不存储任何数据而是把读取、写入、Alter、Truncate、Optimize、分区操作、轻量级更新/删除等全部代理proxy到目标表。类定义位于 src/Storages/StorageAlias.h核心结构如下构造函数接收table_id_别名自身的 StorageID以及target_database_、target_table_被指向的目标表见 src/Storages/StorageAlias.hread()/write()/distributedWrite()分别把 SELECT、INSERT、分布式写入转发给目标表storesDataOnDisk()恒返回false明确 Alias 不落盘src/Storages/StorageAlias.h大量的能力探测接口supportsReplication、getStoragePolicy、totalBytesUncompressed、lifetimeRows、lifetimeBytes、getSerializationHints、tryLockForShare、lockForShare等都委托给目标表使 Alias 在优化器与系统表眼中看起来就像目标表本身。该引擎通过registerStorageAlias(factory)注册到存储引擎工厂见 src/Storages/registerStorages.cpp 与 src/Storages/registerStorages.cpp。同批次还修复了 Alias 的稳定性问题PR #89812禁止别名再指向另一个别名避免链式嵌套、与SharedDatabaseCatalog配合时的StrictnessLevel问题并补齐了上述若干接口。这意味着使用 Alias 引擎时需要留意必须在查询或配置中开启allow_experimental_alias_table_engine1否则创建会被拒绝别名不应指向另一个别名本版本起被明确禁止由于它不存储数据DROP 只会删除别名本身不会删除目标表源码注释明确Drop alias, not the target table见 src/Storages/StorageAlias.h。说明该设置定义于 src/Core/Settings.cpp在后续版本中已被标记为MAKE_OBSOLETE废弃开关表明 Alias 引擎在仓库后续演进中已进一步调整本文以 v25.10.3.100-stable 变更日志描述为准。Improvement文件缓存与 S3 生态的多项增强本版本的五项改进集中围绕文件系统缓存filesystem cache与 S3 对象存储场景反映出该版本对缓存正确性 远端 I/O 韧性的侧重。1.system.asynchronous_metrics中缓存指标的修复PR #89640此前FilesystemCacheBytes等指标在system.asynchronous_metrics中存在计算错误。本版本修复为SYSTEM查询对每个文件系统缓存只执行一次避免重复统计指向同一路径的多个缓存在system.filesystem_caches中提供原子化atomic的统一视图。对运维人员而言这意味着缓存指标更可信可用于更准确地判断缓存命中率与占用量。2.keep_free_space_remove_batch默认值调整PR #90030文件缓存设置keep_free_space_remove_batch的默认值从 10 调整为 100官方说明称因为更优more optimal。该设置控制后台线程为维持空闲空间/元素比例而执行的单次批量删除的缓存元素个数。从源码定义看src/Interpreters/FileCache/FileCacheSettings.cpp该参数类型为UInt64描述为后台线程为维持空闲空间/元素比例而移除的缓存元素批量大小。较大的批量意味着每次触发清理时能一次回收更多条目从而减少后台清理任务的调度频率。当前仓库源码中的默认常量定义在 src/Interpreters/FileCache/FileCache_fwd.h值为 250可见该默认值在后续版本中仍被持续调优同一常量还被用于invalidated_entries_cleanup_remove_batch每次后台迭代在单个写锁下移除的失效优先级队列条目上限见 src/Interpreters/FileCache/FileCacheSettings.cpp。3. S3Queue 清理降低 Keeper 节点上限PR #90201S3Queue 清理过程中发出的 RemoveRecursive Keeper 请求现在使用更低的节点数上限避免在队列元数据清理时对 Keeper协调服务造成过大的单次负载改善大规模 S3Queue 场景下的协调稳定性。4. S3 XML 响应解析失败自动重试PR #90216当 S3 库解析 XML 响应时遇到网络错误现在会进行重试。此前网络抖动导致的 XML 解析失败可能直接中断 S3 相关操作重试机制提升了 S3 场景含表引擎、备份等对瞬时网络故障的韧性。5. guardrails 限制告警信息增强PR #90438当接近 guardrails护栏/资源使用上限时告警消息现在会同时展示当前值与触发抛错的值throw 值让用户无需查阅日志即可判断距离上限还有多少余量便于提前调整。Bug Fix按主题解析本版本的修复全景Bug Fix 是本版本的主体官方将其定义为官方稳定版中用户可见的错误行为修复。按主题归类如下。JOIN / ARRAY JOIN 与懒列复制enable_lazy_columns_replicationenable_lazy_columns_replication是本版本 Bug Fix 中出现频率最高的设置共有 4 处修复与之相关崩溃修复JOIN 右侧使用ARRAY JOIN且开启该设置时崩溃PR #89551逻辑错误修复对 Map 列执行ARRAY JOIN时可能触发逻辑错误PR #89717关闭 issue #89705远端查询崩溃IN内嵌ARRAY JOIN且开启该设置时可能崩溃PR #89997解决 #90361插入报错插入时使用ARRAY JOIN报Column with Array type is not represented by ColumnArray column: ReplicatedPR #90066。这四类修复均指向同一个底层特性懒列复制强烈建议开启该设置的复制表用户优先升级。查询分析与优化器query_plan_convert_join_to_in导致逻辑错误PR #89554解决 #89066修复了 JOIN 转 IN 优化在特定计划形态下的误判analyzer_compatibility_join_using_top_level_identifier在多 JOIN 场景下的逻辑错误PR #90010聚合投影aggregated projection优化下部分查询异常PR #90288旧分析器old analyzer中无论optimize_injective_functions_in_group_by取值如何都从GROUP BY移除单射函数以保证兼容性PR #89870解决 #89854。查询屏蔽query masking修复查询屏蔽规则被错误应用到 DDL 语句的问题PR #89272。此前 DDL如CREATE/DROP可能被匹配到查询内容的正则屏蔽规则误拦截或误改写本版本确保屏蔽规则仅作用于查询语句。数据序列化、格式与类型推断二进制反序列化data types binary deserialization可能的栈溢出PR #89822关闭 #88710聚合状态等来源的反序列化增加大小检查size checks防止越界读取PR #90031高级 JSON 共享数据序列化中读取路径及子列时的逻辑错误PR #89819关闭 #89805文本格式下部分情况下从字符串推断错误 DateTime64 值PR #90013解决 #89368BSONEachRow与MsgPack格式中空元组列导致的逻辑错误PR #90018同时关闭 #89814 与 #71536SHOW COLUMNS与SHOW FUNCTIONS的错误转义修复PR #89942user_files目录允许以点开头的文件PR #90079关闭 #89662此前file()表函数等场景无法访问隐藏文件。标量函数与向量检索base32Encode缓冲区大小计算修复长度小于 5 的字符串列可能导致崩溃PR #89929解决 #89911IN函数中空元组导致逻辑错误PR #89850关闭 #88343reverse与CAST中空元组逻辑错误PR #89908关闭 #89137equals函数罕见场景逻辑错误PR #90557关闭 #88142concatWithSeparator使用 const 非字符串列时逻辑错误PR #90655关闭 #90596L2DistanceTransposed修复两个问题precision 参数超出合法范围导致崩溃PR #90405关闭 #90401参考向量默认Array(Float64)与QBit列元素类型如Float32、BFloat16不一致时距离计算错误——函数现在会自动将参考向量强制转换为QBit的元素类型PR #90485解决 #89976numbers系统表大步长step时的逻辑错误与取模缺陷PR #90123关闭 #83398。MergeTree 合并、元数据与复制合并任务被内存限制等中断时的清理竞态此前部分创建的结果 part 可能在 merge mutate 后台执行器锁外被取消而不清理最终触发磁盘事务回滚并从 S3 删除数据本版本修复了该垃圾清理竞态PR #89875某些 skip index 在表定义中的格式化错误导致METADATA_MISMATCH进而破坏 Replicated Database 新副本创建PR #90251空 LowCardinality 索引的误报错误修复PR #89680属 NOT FOR CHANGELOG 类磁盘对象存储事务回滚时将所有待删除对象合并为单个移除批次、执行单次 S3 交互PR #89877属 NOT FOR CHANGELOG 类。数据湖与外部数据源data lake catalog 数据库现在默认出现在SHOW DATABASES结果中PR #89914解决此前需要额外配置才能看到的问题MongoDB 表引擎 URL 校验修复用户名包含字符时因编码不当导致连接失败PR #89970Hive 分区中静态KeyValuePairExtractor的竞态问题并发文件读取时可能造成数据损坏或崩溃已修复PR #90474Iceberg 设置文档中的变更历史修正PR #89804属 NOT FOR CHANGELOG 类。备份、远端查询与对象存储GCS 备份启用原生复制native copy由于客户端克隆不正确此前 GCS 原生复制始终失败退化为手动读写数据的低效路径本版本修复克隆逻辑PR #89923远端查询在取消过程中连接断开后仍尝试读取远端服务器数据导致崩溃PR #89740解决 #89468Prewhere 在index_granularity_bytes0且 JSON 路径不存在时的逻辑错误PR #90375解决 #86924。其他内部改进回移植firstNonDefault函数PR #88441S3Queue 元数据仅在初始副本上写入 KeeperPR #89259JSON 逻辑错误增加更多诊断信息PR #90286。Build/Testing/Packaging依赖版本升级本版本包含三项依赖升级均由 Konstantin Bogdanov 提交依赖变更PRicurelease-75.1 → release-78.1#90060curl8.15.0 → 8.17.0#90061libarchive3.8.1 → 3.8.2#90062依赖升级通常带来安全修复与性能改进且均经过回移植测试属于低风险变更。升级建议与验证综合上述变更v25.10.3.100-stable 是一版典型的稳定性收敛补丁建议以下场景优先升级开启enable_lazy_columns_replication的复制表集群本版本集中修复了该设置下的 4 个崩溃/逻辑错误收益最直接重度使用文件缓存含远端磁盘缓存的部署缓存指标、清理批量与垃圾回收竞态均有改善使用 S3Queue、S3/备份、MongoDB/Hive 等对象存储与外部数据源场景获得重试、清理与竞态修复向量检索用户L2DistanceTransposed的崩溃与类型不匹配问题修复建议更新后回归QBit列上的相似度查询。验证手段方面可以结合仓库内置测试体系所有修复均来自先前的开发版本回移植相应行为可在 tests/queries 与 tests/integration 中找到回归用例的对应场景例如ARRAY JOIN、JSON 序列化、S3/备份、system.filesystem_caches等主题升级后建议重点跑一遍SELECT/INSERT冒烟测试、SHOW DATABASES输出检查以及开启 Alias 引擎时的allow_experimental_alias_table_engine1配置验证。小结v25.10.3.100-stable 通过1 项实验特性 5 项改进 30 余项 Bug 修复的补丁组合重点解决了Alias表引擎的稳定性与实验化边界、文件系统缓存的正确性与清理效率以及 JOIN/ARRAY JOIN、序列化、对象存储等高频路径上的用户可见问题。对于运行 25.10 系列的部署本版本是值得跟进的一次稳定性更新对于计划启用懒列复制或向量检索等新特性的用户本版本修复的正是这些特性在实际负载中暴露出的核心缺陷。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表