ClickHouse v26.7.2.59-stable 版本解析AI 函数链路标记、TopK 查询条件缓存与一批高价值修复【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本指南以 ClickHouse 官方版本记录 v26.7.2.59-stable 变更日志对比基线 v26.7.1.1315-stable为核心逐项拆解该稳定版的实验性特性、性能改进、功能增强与全部用户可见的 Bug 修复并结合当前仓库源码说明各配置项的实际位置、默认值与底层实现。读完本文你将掌握该版本引入的新设置如jemalloc_merge_tree_arenas、use_query_condition_cache_for_top_k的用法与适用场景并能按类别快速定位修复内容对自身业务的影响面。版本概览与基线说明本次发布号为v26.7.2.59-stable提交1399e12824d是一个基于26.7分支的稳定版维护发布其变更对比基线为v26.7.1.1315-stable提交a6156303df6。变更内容全部通过 Backport 机制合入即每个条目都先在主分支master合并再由发布团队挑选回移植到 26.7 稳定分支这一点在变更日志中体现为每条记录均标注Backported in #xxxxx的关联 issue 编号。从变更结构看本次发布主要集中在四类Experimental Feature实验性特性1 项Performance Improvement性能改进2 项Improvement功能改进7 项Bug Fix用户可见缺陷修复30 项涵盖崩溃、数据正确性、数据丢失、安全信息泄露等严重问题Build/Testing/Packaging Improvement构建与打包改进2 项依赖升级。实验性特性AI 函数 HTTP 请求的上游端点标记本次发布的唯一实验性特性与 AI 函数相关为OpenAI 格式的 HTTP 请求添加 SQL 层面的标记tag标记内容为调用该请求的 AI 函数的 SQL 名称用于上游端点upstream endpoint的请求识别与计费/审计分析PR #110449。该功能的价值在于当通过 ClickHouse 的 AI 相关表函数或函数如调用外部 LLM/embedding 服务的场景向 OpenAI 兼容端点发起请求时服务端可以把流量精确归属到具体的 SQL 函数便于在上游做用量统计与链路追踪。这属于实验性能力使用前应关注后续版本的行为演进。性能改进本次发布包含两项性能改进均针对 MergeTree 家族的核心路径。FINAL 过滤 小 LIMIT 场景启用懒物化在查询包含FINAL、过滤条件以及较小的LIMIT、且没有ORDER BY时现在会应用懒物化lazy materialization优化PR #110722。该优化针对ReplacingMergeTree等支持FINAL的引擎生效。背景是FINAL语义需要逐行合并同一排序键的版本若目标结果行数很小受LIMIT限制提前物化全部列会浪费大量 IO 与内存。懒物化让引擎先读取、合并足够的行达到LIMIT所需数量再按需读取其余列从而显著降低此类查询的资源开销。适用前提是无ORDER BY一旦查询要求全局排序执行计划仍需完整物化候选行优化不生效。异步插入跨分区去重哈希只计算一次修复了异步插入async insert在跨 P 个分区刷盘时O(P×N) 的重复哈希计算问题PR #111150。在旧实现中一次插入被按分区键拆分到多个分区时每个分区都会对整批数据重新计算去重哈希。修复后DeduplicationInfo::prewarmDataHashes会在分区循环之前调用一次所有分区的克隆数据都继承预计算好的data_hash_batch不再重复计算 P 次。该改动同时作用于MergeTreeSink与ReplicatedMergeTreeSink两条写入路径DuplicationElapsedMicroseconds度量指标会随分区数增加而成比例下降。从源码可以看到这一实现细节在 MergeTreeSink.cpp 中当启用去重时先执行一次checkTimeLimit()保留原有的中断点语义随后在ProfileEventTimeIncrementMicroseconds duplication_elapsed计时段内调用prewarmDataHashes()注释明确说明filterToPartition产生的各分区信息会拷贝这些带缓存的哈希 token因此跨多个分区的行只需哈希一次。相关行为在 gtest_async_inserts.cpp 中有对应测试覆盖。功能改进Improvementpart 级 min-max 索引补齐_block_number与_block_offset本版修复了_block_number和_block_offset虚拟列启用 part 级 min-max 索引所剩余的问题PR #109281。此前该索引在部分场景下会给出错误剪枝结果本次补齐后针对这两个虚拟列的等值/范围过滤可以在 part 粒度直接裁剪数据减少扫描量。新增服务端设置jemalloc_merge_tree_arenas为缓解多核服务器上并发 merge 之间的内存分配器锁竞争新增服务端设置jemalloc_merge_tree_arenasPR #109490它控制用于MergeTreepart 与表元数据的专用 jemalloc arena0禁用专用 arena1使用单一 arena默认值N创建 per-CPU 的 arena 池。同时专用 arena 的使用范围被收窄为仅容纳长生命周期元数据避免短生命周期对象挤占专用 arena。对许多核机器而言采用 arena 池可把不同 merge 线程的分配分散到独立 arena显著降低分配器内部的全局锁竞争。查询条件缓存新增 TopK 开关新增设置use_query_condition_cache_for_top_k默认关闭用于控制查询条件缓存query condition cache是否作用于ORDER BY ... LIMIT nTopK类查询PR #111492 中该设置类型为Bool默认值为true声明但其说明指出作为预防措施在发布时默认关闭直到缓存条目的正确性被充分验证同时它仅在use_query_condition_cache开启时才有意义。值得注意的实现细节TopK 查询在运行过程中可能依据运行阈值丢弃 granule因此其缓存条目按 TopK 计划参数与被读取的 part 集合分区避免不同执行形态之间错误复用缓存。JOIN 兼容性设置analyzer_compatibility_apply_final_to_all_joined_tables新分析器Analyzer在 26.6 起改变了FINAL的传播语义此前写在 JOIN 最左侧表上的FINAL会被错误地应用到其他连接表。本版新增设置analyzer_compatibility_apply_final_to_all_joined_tablesPR #111589 中可以看到其默认值为false说明文档明确建议推荐做法是显式地在每个需要FINAL的表上书写FINAL而不是依赖该兼容开关。该设置注册在设置变更历史中因此compatibility设为 26.6 之前的版本时会自动恢复旧语义。测试用例见 04627_analyzer_compatibility_final_all_joined_tables。命名集合存储类型可查询命名集合named collections生效的存储类型现在可以通过system.server_settings中的named_collections_storage.type键查询也可用getServerSetting(named_collections_storage_type)函数读取PR #111806。这为运维排查“集合到底存到本地还是 ZooKeeper”提供了标准入口。快照生成 CPU 开销优化针对文件数量巨大的场景降低了生成快照时的 CPU 使用PR #112297。同批改动的配套调整还包括将max_snapshot_commit_thread_pool_size下调至 16见下文“非用户可见变更”一节。Iceberg 兼容性容忍 manifest 缺失sequence_numberIceberg v2 规范要求 manifest 文件包含sequence_number字段但部分引擎如 BigQuery写出的文件可能缺少该字段。本版允许读取这类不合规范的表PR #112431提升跨引擎数据互操作性。Web UI 细节修复修复了 Firefox 下 Web UI 中“”新建标签页按钮渲染高度超过标签页本身的问题PR #109524。Bug 修复详解本版 Bug 修复数量最多按影响面可分为几类。崩溃类Crash / SIGSEGV / OOBProtobuf 读取崩溃当input_format_allow_errors_num 0且同一 block 中有效消息位于坏可跳过消息之前时会触发服务崩溃SIGSEGV已修复PR #107739。S3Queue / AzureQueue 越界访问在enable_hash_ring_filtering 1、批次含不可处理文件且恰逢 Keeper 请求设置批次为 processing 失败时发生越界访问崩溃已修复PR #108977。畸形聚合状态反序列化反序列化含String值的畸形聚合函数状态时发生越界访问导致段错误现在改为校验并拒绝不再崩溃PR #111606。macOS aarch64 栈回溯崩溃在协程/fiber 栈上执行如内存 profiler 触发栈回溯时崩溃已修复PR #111656。加密磁盘 Compact part 直接 IO 读取ReadBufferFromEncryptedFile: Wrong file position逻辑错误导致 merge 卡在system.replication_queue已修复PR #112943。数据正确性与数据丢失类并发 RENAME COLUMN 导致数据丢失当 merge 与ALTER TABLE ... RENAME COLUMN并发、或某列的值仅来自 lightweightUPDATE时无默认表达式的列可能从合并后的 part 中被删除读取结果为 NULL。这是严重的数据丢失问题已修复PR #109356。反向排序键剪枝错误对于ORDER BY (g, r DESC)这类含降序列的排序键跨越前导键列变化与降序列的 granule 可能被错误剪枝而丢行已修复PR #111059。Nullable 元数据变更后的子列误判对列执行仅元数据的ALTER MODIFY COLUMN T改为Nullable(T)后旧 part 的.null子列从存储类型默认值NULL填充而非从实际父列推导导致IS NULL/IS NOT NULL/count()在optimize_functions_to_subcolumns下结果错误已修复PR #110584。文本索引下空 needle 函数结果错误has、mapContainsKey、mapContainsValue在存在文本索引时对空 needle 返回错误结果已修复PR #110246。Bucketed Map 序列化键序保留 bucketed Map 序列化的原始键顺序修复依赖键序的比较操作PR #109178。物化视图 Alias 目标 去重表的数据错乱当 INSERT 流经依赖物化视图、目标为Alias且内层查询改变行数、并在 alias 跳转后可达去重表时触发block.rows() getRows()逻辑错误release 构建下表现为越界读与去重失效已修复PR #111103。File 引擎向不可追加格式追加写入向非空文件以不支持追加的格式如Avro执行 INSERT经由文件描述符或分区路径会绕过既有检查导致写入第二个文件头、文件不可读。现在统一以CANNOT_APPEND_TO_FILE拒绝PR #112839。空 part 合并文本索引合并含文本索引的 part 时若其中一个 part 为空如突变删光所有行出现ATTEMPT_TO_READ_AFTER_EOF已修复PR #112490。查询正确性类LEFT JOIN 唯一右键混合 ON 条件JoiningTransform中LEFT JOIN使用唯一右键、混合ON条件且max_joined_block_size_rows较小时出现LOGICAL_ERRORInvalid number of rows in Chunk已修复PR #106928。虚拟列 懒物化_part_starting_offset/_part_offset虚拟列用于 WHERE 且启用懒物化时出现NOT_FOUND_COLUMN_IN_BLOCK已修复PR #108287。FINAL PREWHERE 下推SELECT s FROM t FINAL WHERE k GROUP BY s在optimize_move_to_prewhere_if_final 1该设置定义见 Settings.cpp时若过滤排序键列不在 SELECT 列表且被移到 PREWHERE出现NOT_FOUND_COLUMN_IN_BLOCK已修复PR #111721。ANY JOIN 到 Join 引擎表当 WHERE 中右表列过滤使规划器可将 ANY 连接改写为 SEMI/ANTI 时Join引擎表固定声明 strictness出现INCOMPATIBLE_TYPE_OF_JOIN现在对这类表拒绝改写PR #111362。CTE 限定列名启用分析器时视图内存储的查询使用cte_name.column限定列名会报UNKNOWN_IDENTIFIER已修复PR #111386。字典 JOIN 键类型归一化JOIN 到字典时使用Nullable、LowCardinality或LowCardinality(Nullable)连接键而字典键未包裹报TYPE_MISMATCH现在直接字典查找会将键归一化为字典声明键类型与dictGet/dictHas一致且 NULL 键永不匹配PR #111857。JOIN ON 条件在 WHERE 中重复join_use_nulls 1时重复JOIN ON条件于 WHERE 报AMBIGUOUS_COLUMN_NAMEBlock structure mismatch已修复PR #112007。materialized view 行数变化 去重修复block.rows() getRows()逻辑错误见上文数据正确性部分。对象存储与数据湖类只读对象存储副本不发现新 part配置read_only true的磁盘无法通过refresh_parts_interval发现新 part且table_disk true被误拒table_disk is not supported for non-ObjectStorage disks已修复PR #110460。S3Queue/AzureQueue ordered 模式锁续期持久化处理节点persistent processing nodes模式下流式处理期间现在会刷新 bucket 锁避免 TTL 清理persistent_processing_node_ttl_seconds移除活跃处理器的锁若锁所有权仍丢失会被检测并上报逻辑错误 ObjectStorageQueueBucketLockLost相关 profile event流式处理以全新文件迭代器恢复PR #110292。Iceberg 类型字符串空白差异读取 decimal 等参数化原始类型在不同元数据文件中序列化空白不同的 Iceberg 表时误报ICEBERG_SPECIFICATION_VIOLATION如decimal(20,0)vsdecimal(20, 0)现在比较时忽略空白PR #109676。Iceberg OPTIMIZE MANIFEST当 manifest 分区元组与其分区规范不匹配时OPTIMIZE TABLE ... MANIFEST失败已修复PR #111368。Paimon 可变 LATEST 提示并发替换读取 Paimon 表时 mutablesnapshot/LATEST提示被并发替换可能导致失败现在无效或过期提示安全回退到快照列表PR #112010。S3 显式 role 的 STS 授权s3_allow_server_credentials_in_user_queries错误拒绝查询中提供的extra_credentials(role_arn ...)现在显式 role 的 STS assume-role 始终允许不暴露服务端自身凭据是授予私有 S3 桶访问权的文档化方式PR #112603。安全与凭据泄露修复重点本版进行了一次大范围凭据泄露修复PR #109768覆盖SHOW CREATE、system.query_log、服务端日志与EXPLAIN输出。修复范围包括S3定位器的所有形式现在都会掩蔽session_token与 Google ADC secretsextra_credentials/headers的值在任意参数位置都会被掩蔽重复或表达式形式的 secret key、非法位置形式fail closed、嵌入 S3 URL 中的凭据同样被掩蔽覆盖对象显式 URL 与命名集合的s3/s3Cluster表函数、S3 系表引擎S3、GCS、数据湖引擎、S3Queue、S3数据库引擎、BACKUP ... TO S3以及Backup数据库引擎此外由表达式构建包括从 SQL UDF 内联的encrypt/decrypt/ HMAC 的 secret 参数现在会在 projection 名称、EXPLAIN QUERY TREE与EXPLAIN actions中被隐藏。该修复对生产安全至关重要即使查询被记录或解释敏感凭据也不会落入日志与系统表。其他修复路径校验修复对user_files的路径检查并将本地对象访问限制仅限 user files 路径PR #111442、PR #111483。_partition_id占位符兼容文件类引擎S3、AzureBlobStorage、URL等路径中的{_partition_id}在未显式指定partition_strategy时重新隐含wildcard策略不再受file_like_engine_default_partition_strategy影响恢复 26.6 之前 DDL 的向后兼容此前会报BAD_ARGUMENTS。该默认策略设置的当前默认值为HIVE见 Settings.cppPR #111279。带参数的突变分区ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}的替换分区值序列化后无法回读破坏表加载复制表上为每个副本现在 mutation 命令在写入 ZooKeeper 或磁盘前会验证可回读不匹配时直接使 ALTER 失败PR #111518。字典 CREATE OR REPLACE 残留不同种类的字典对象执行CREATE OR REPLACE在提交后才失败残留_tmp_replace_*孤儿表已修复PR #111142。TLS 对端证书内存泄漏开启证书校验时每次 TLS 握手泄漏对端证书SecureSocketImpl::verifyPeerCertificateImpl未释放SSL_get1_peer_certificate返回的证书已修复PR #111425。system.zookeeper_info 解析溢出修复解析时的溢出问题PR #111629。macOS 采样 profiler 死锁pthread_rwlock在采样查询 profiler 开启时丢失唤醒导致永久挂起Apple bug FB24027930Darwin 上已替换为信号安全实现PR #112267。Azure HTTP Content-LengthPoco 版 Azure HTTP 传输现在为 SDK 客户端如 Azure Key Vault从请求体设置Content-Length修复411 Length Required错误PR #110299。复杂 schema 演进拼写错误修复复杂 schema 演进中的拼写错误PR #111489。schema 演进中的 URL 修复PR #112165 对应修复PR #111785。构建、测试与打包改进Apache Thrift升级至0.24.0PR #111278。SQLite amalgamation从 3.41.2 升级至3.53.4PR #112599。非用户可见变更速览除上述用户可见条目外本版还包含若干内部变更NOT FOR CHANGELOG / INSIGNIFICANT供关注实现细节的读者参考ZXC codec 标记为实验性PR #111007元数据事务移除前置条件preconditions改为在提交时验证PR #111353max_snapshot_commit_thread_pool_size下调至 16PR #111417若干测试稳定性修复与 TSan 运行时抑制如 test_replicated_table_structure_alter、test_s3_table_functions_timeouts。升级与验证建议综合本版变更若你在生产环境使用 26.7 分支建议重点关注以下升级验证项安全修复优先验证凭据掩蔽覆盖了SHOW CREATE、system.query_log与 EXPLAIN 输出升级后可用含extra_credentials/session_token的 S3 查询验证日志与系统表中不再出现明文凭据数据正确性修复影响面并发RENAME COLUMN merge、lightweight UPDATE 列的合并、optimize_functions_to_subcolumns下的 Nullable 元数据变更等修复涉及既有数据建议对相关表执行CHECK TABLE或抽样核对TopK 缓存行为use_query_condition_cache_for_top_k默认关闭依赖查询条件缓存加速 TopK 查询的负载需显式开启并观察缓存命中与结果一致性FINAL语义变更26.6 起FINAL不再自动传播到 JOIN 的其他表若历史查询依赖旧行为可通过analyzer_compatibility_apply_final_to_all_joined_tables或显式书写FINAL适配多核 merge 环境jemalloc_merge_tree_arenas默认单 arena多核高并发 merge 场景可尝试 per-CPU 池并观察内存与延迟指标。以上全部条目的权威出处为仓库内的 v26.7.2.59-stable 变更日志文中涉及的设置定义与实现证据分别位于 Settings.cpp、MergeTreeSink.cpp 与对应测试目录可进一步按需查阅。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考