
ClickHouse v26.3.11.36-lts 版本更新解析从新设置到安全修复的完整技术指南【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse导读本文基于 ClickHouse 官方 changelog 文档 docs/changelogs/v26.3.11.36-lts.md系统梳理 v26.3.11.36-lts 这一维护版本LTS 分支第 11 个补丁的全部更新内容。文章覆盖 4 项功能改进、22 项用户可见的 Bug 修复、1 项构建/测试改进并深入结合 src/Core/Settings.cpp 等仓库源码详解新增设置defer_partition_pruning_after_final的语义与适用场景、SQL 注入漏洞的修复原理、以及多个崩溃类问题的根因。读完本文你将掌握该版本的升级评估要点、受影响功能的排查方法以及如何利用新增设置调优FINAL查询性能。版本概览与升级背景v26.3.11.36-lts 是 ClickHouse 26.3 LTS 分支上的第 11 个补丁版本基线为 fa3aa24e791上一版本为 v26.3.10.62-lts (e1c11930c28)。作为一个 LTS 维护版本它不引入新功能而是聚焦于正确性修复多个查询结果错误、崩溃crash、use-after-free、数据竞争问题安全性修复一个可导致任意 SQL 注入的字典源漏洞性能与健壮性改进FINAL查询的优化选项、备份、Refreshable MV 的稳定性向后兼容性修复修复旧客户端插入时的协议兼容问题。该版本的完整条目可在仓库的 CHANGELOG.md 及 docs/changelogs 目录下追溯。核心功能改进Improvement1. 新增设置defer_partition_pruning_after_final为 FINAL 查询提供性能回归开关这是本版本最重要的一项变更PR #104705它把一个 26.3 中静默引入的行为变更暴露为可配置项。背景从 26.3 开始ClickHouse 的FINAL查询用于 ReplacingMergeTree 等去重引擎会默认跳过分区裁剪partition pruning。这是因为FINAL需要按主键去重而相同主键的行可能分布在不同的分区中——如果先按分区裁剪掉某些分区就可能把参与去重的行静默排除掉导致去重不完整、结果错误。新设置语义定义于 src/Core/Settings.cpp值行为适用场景1默认延迟分区裁剪到FINAL之后correctness-safe正确性安全通用场景保证去重结果正确0在FINAL之前进行分区裁剪恢复 pre-26.3 行为事件日志类负载同一主键行不可能跨分区性能收益当表的分区键列不在排序键中且WHERE条件过滤了分区列时设置为0可以显著加快查询——因为可以在读取阶段就裁剪掉大量分区。这适用于事件日志表分区列在插入时确定、之后不会变化等场景。兼容性联动设置compatibility 26.2会自动将该设置翻转为0恢复 pre-26.3 的行为。从源码看src/Core/SettingsChangesHistory.cpp 中记录了该设置的版本历史——它作为一个行为变更回溯文档化条目注册在 26.3 块下使得compatibility 26.2能够正确还原被 26.3 破坏的既有行为。值得注意的是该设置在源码注释中说明仅影响分区键列不包含在排序键中的分区表对于其他表分区裁剪始终生效见 src/Core/Settings.cpp。2. 备份健壮性Refreshable Materialized View 持续刷新时的备份决策PR #103384 改进了备份的韧性当 Refreshable Materialized Views 被持续刷新时备份决策现在基于快照化snapshotted表的状态而不是全局状态。这避免了备份过程中因视图刷新导致的状态不一致提升了BACKUP操作的可靠性。3.lowerUTF8/upperUTF8大数据集处理修复PR #104229这两个函数常被用作文本索引text index的预处理器preprocessor例如配合hasAnyTokens、hasPhrase等索引函数使用见 src/Functions/hasPhrase.cpp。4. 行策略与 FINAL 的交互优化PR #102884 对FINAL查询中的行级安全row policy处理做了优化当行策略只依赖排序键列且是确定性的时跳过在FINAL之后延迟应用行策略并同时跳过由此被迫执行的PREWHERE延迟。这减少了冗余处理。相关设置apply_row_level_security_after_final在 src/Core/Settings.cpp 中有说明——当启用且行策略使用非排序键列时PREWHERE也会被延迟以保持执行顺序正确。Bug 修复详解用户可见行为修复本版本共包含 22 项用户可见的 Bug 修复按功能域分类如下。查询结果正确性修复修复项影响修复 PRINNER JOIN 过滤器被错误下推到 outer join 的 ON 子句查询结果错误#101504RIGHT ANY JOIN 在右表多行/块拆分时结果错误查询结果错误issue #99431#102064optimize_inverse_dictionary_lookup边界情况可能静默丢行或抑制异常issues #103270、#103085#104133投影projection与 UNION ALL 视图、窗口函数、别名列冲突NOT_FOUND_COLUMN_IN_BLOCK 等异常#104317关于optimize_inverse_dictionary_lookup该设置用于优化字典反向查找场景本次修复了该优化在若干边界情况下可能静默丢弃数据行或吞掉异常的正确性问题升级后相关查询的结果可能与旧版本不同以修复后的正确结果为准。崩溃与内存安全修复Crash / use-after-free修复项根因修复 PR内存数据库中 ALTER 崩溃临时表执行 ALTER 时的生命周期问题#102360AggregateFunction状态与整数相乘的 heap-use-after-free平方取幂循环中状态自合并merge重分配内部存储时为未定义行为#103536StorageKafka2的 use-after-freeKeeper 会话被替换时消费者仍持有临时 topic-partition 锁#103890AvroConfluentRowInputFormat段错误use-after-free#104751FutureSetFromTuple::buildOrderedSetInplaceTOCTOU 数据竞争导致逻辑错误logical error#104673其中AggregateFunction乘法修复针对的是quantilesExactState(...) * N这类表达式——当聚合函数状态的merge会重分配内部存储时指数平方循环中状态与自身合并是未定义行为可能导致堆释放后使用。字典源修复含 SQL 注入漏洞关键安全修复PR #104009PostgreSQL、Cassandra 和 XDBC 字典源存在 SQL 注入漏洞——当字符串键包含单引号时ExternalQueryBuilder使用\反斜杠转义但这些后端将反斜杠视为字面字符而非转义序列从而允许任意 SQL 注入到字典查找查询中。修复后这些后端改用 SQL 标准的转义ClickHouse 和 MySQL 字典源继续使用反斜杠转义。从源码验证在 src/Dictionaries/ExternalQueryBuilder.cpp 中通过format_settings.values.escape_quote_with_quote true;启用 SQL 标准引号转义注释明确说明SQL-standard DBs (PostgreSQL, Cassandra, etc.) treat\as a literal character, so useescaping。该构建器被 src/Dictionaries/PostgreSQLDictionarySource.cpp、src/Dictionaries/CassandraDictionarySource.cpp、src/Dictionaries/XDBCDictionarySource.cpp 等字典源使用其单元测试位于 src/Dictionaries/tests/gtest_external_query_builder.cpp。字典源数据竞争修复PR #103277ClickHouse、MySQL、PostgreSQL 和 XDBC 字典源中clone() const读取与isModified() const写入同一invalidate_query_response字符串构成数据竞争本次修复。其他字典相关修复DataLakeCatalog现在会尊重服务器的http_forbid_headers配置来校验auth_header设置PR #98827postgres 数组解析的下溢修复PR #104322。索引与数据一致性修复修复项说明修复 PRALIAS 列上的 text/bloom filter 跳过索引被静默忽略当表达式含 lambda 捕获常量时如arrayMap((k, v) - concat(k, , v), mapKeys(m), mapValues(m))#103708JSON 列数据 part 检查与一致性检查此前可能对缺失文件产生误报#103858动态结构类型的数据 part 一致性检查并检测损坏的columns_substreams.txt#103858 的增强版重提交#104888备份/恢复与 Keeper 修复修复项说明修复 PR复制表RESTORE的 Keeper 重试预算恢复后的 part 挂载使用backup_restore_keeper_max_retries而非常规插入的 Keeper 重试预算#104610Keeper 终止/重启循环当get /keeper/availability_zone携带quorum_readstrue发送给未配置placement的 Keeper 时#104663协议兼容性与其他修复客户端向后兼容PR #103148修复旧客户端通过remote()或分布式表向新服务器插入时因processInsertQuery末尾无条件发送sendProgress导致的UNEXPECTED_PACKET_FROM_SERVER错误。这是重要的协议兼容修复升级服务器后旧客户端插入不再报错。JIT 编译修复PR #105048修复toUInt128(Float64 表达式)等 Float 转 UInt128 表达式 JIT 编译时的CANNOT_COMPILE_CODE Could not find symbol __fixunsdfti——unsigned 128 位 float-to-int 的 compiler-rt builtin 此前缺失于 JIT 符号解析器issue #105031。JSON 列 GROUP BY 修复PR #100758当向 JSON 列插入的行引入新动态字段与已存在字段类型不兼容且该列随后被用作 GROUP BY 键时可能出现的异常。IN (subquery) 移到 PREWHERE 的 Not-ready Set 异常PR #100375当优化器把带IN (subquery)的过滤器移动到 PREWHERE 时抛出异常。构建/测试改进本版本包含 1 项构建/测试改进为函数实现压力测试检查函数各种性质的健全性PR #93543。这属于持续提升函数正确性的测试基础设施投入。此外还包括若干NOT FOR CHANGELOG / INSIGNIFICANT级别的内部修复如 Keeper 组件跟踪守卫补充、刷新物化视图SECONDARY_CREATE的 sanity checks 放宽、以及一个测试稳定性修复03706_statistics_preserve_checksums_on_mutations。升级评估与排查建议综合上述内容升级到 v26.3.11.36-lts 时应重点关注安全检查优先如使用了 PostgreSQL / Cassandra / XDBC 字典源且字典键可能包含单引号请优先升级——这是可被利用的 SQL 注入漏洞CVE 级风险。修复原理见上文ExternalQueryBuilder的转义src/Dictionaries/ExternalQueryBuilder.cpp。FINAL 查询性能如果你有事件日志类表同一主键行不可能跨分区且 26.3 升级后FINAL查询明显变慢可评估设置defer_partition_pruning_after_final 0恢复快速路径。该设置在 src/Core/Settings.cpp 中定义仅影响分区键列不在排序键中的分区表。查询结果变化optimize_inverse_dictionary_lookup的边界修复、JOIN 下推修复、RIGHT ANY JOIN 修复会改变受影响查询的结果——升级后建议对依赖这些特性的查询做结果回归验证。旧客户端兼容remote()/ 分布式表插入的UNEXPECTED_PACKET_FROM_SERVER问题已修复升级服务器后可验证旧版本客户端的插入链路。JSON 相关修复如果使用 JSON 列并曾遇到缺失文件误报或 GROUP BY 异常本版本已修复。如何查看与应用该版本阅读完整 changelogdocs/changelogs/v26.3.11.36-lts.md查看版本历史与聚合变更CHANGELOG.md设置项的完整定义与默认值见 src/Core/Settings.cpp 中对应DECLARE块行为变更的版本历史追踪见 src/Core/SettingsChangesHistory.cpp。部署与验证方式在服务器上运行clickhouse-server并执行SELECT version()确认版本对设置类变更可通过SET defer_partition_pruning_after_final 0;会话级验证或写入config.xml的profiles节点持久化。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考