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

资讯详情

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

ClickHouse v21.11.4.14-stable 补丁版本解读:SHOW GRANTS、Keeper 启动、StorageMerge 与远程读取修复全解析

ClickHouse v21.11.4.14-stable 补丁版本解读:SHOW GRANTS、Keeper 启动、StorageMerge 与远程读取修复全解析 ClickHouse v21.11.4.14-stable 补丁版本解读SHOW GRANTS、Keeper 启动、StorageMerge 与远程读取修复全解析【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHousev21.11.4.14-stable 是 ClickHouse 21.11 稳定分支上的一次补丁patch发布集中修复了权限展示、INTERSECT/EXCEPT、物化视图删除后查询、Keeper 崩溃恢复、GROUP BY 位置参数等一系列在官方稳定版中用户可见的问题并调整了远程文件系统读取方式的配置项命名。本文以 v21.11.4.14-stable 变更日志 为核心骨架逐条剖析每个修复的背景、影响面与底层实现位置帮助你在升级到该版本前评估风险、升级后验证关键行为。一、版本定位稳定分支上的修复发布ClickHouse 采用「主版本 补丁版本」的发布节奏v21.11.4.14-stable属于 21.11 系列稳定分支其对比基线是v21.11.3.6-stable。这意味着本次发布不引入新功能而是把上游主干上已验证的修复通过 backport回溯移植机制合并进稳定分支保证已部署稳定版的用户可以在不升级大版本的前提下获得缺陷修复。从变更日志的章节划分可以看出 ClickHouse 对补丁的分类管理章节含义本版本条目数Bug Fix常规缺陷修复backport 自上游1Bug Fix (user-visible misbehaviour in official stable release)官方稳定版中用户可见的错误行为优先级最高5Imrovement (changelog entry is not required)改进项正常无需单独写 changelog 条目1NOT FOR CHANGELOG / INSIGNIFICANT内部/次要修复不对外宣传3其中「官方稳定版中用户可见的错误行为」分类是该补丁版本最需要关注的部分——它直接对应线上用户可能已经踩到的故障场景。二、权限系统修复SHOW GRANTS 与部分撤销partial revoke修复内容修复使用部分撤销partial revokes时SHOW GRANTS输出不正确的问题上游 issue #31138pull request #31249。背景什么是部分撤销ClickHouse 的 RBAC 权限模型支持「授予大权限、再部分撤销」的组合。例如对用户授予整张表的 SELECT 权限再撤销其中某一列的权限这种「在已授权范围内剔除一部分」的操作即 partial revoke。它依赖src/Access/模块中的AccessRightsElement见 AccessRightsElement.cpp与 AccessControl.cpp 来实现权限的继承、合并与冲突消解。SHOW GRANTS的作用是把一个用户/角色当前生效的权限重新翻译回 GRANT 语句的文本形式因此它必须精确还原「哪些权限被授予、哪些被部分撤销」的完整结构。此前存在边界情况下翻译结果失真可能导致 DBA 看到与实际生效权限不一致的授权信息。对本版本的影响修复后SHOW GRANTS对 partial revoke 场景能正确呈现权限结构避免误读生效权限涉及角色继承、列级权限撤销的复杂授权体系用户升级后应重点回归验证SHOW GRANTS的输出。三、查询引擎修复INTERSECT/EXCEPT 边界情况修复内容修复INTERSECT/EXCEPT的若干边界情况closes #30803pull request #30965。INTERSECT交集与EXCEPT差集是 ClickHouse 支持的集合运算其执行路径涉及查询分析器src/Analyzer与解释器src/Interpreters对集合操作的展开与去重逻辑。修复点覆盖了空结果集、与 ORDER BY/LIMIT 组合、以及多次嵌套等易出错场景。对于使用集合运算构建复杂报表、漏斗分析的用户本次修复降低了边界输入下返回错误结果的概率。四、物化视图删除后查询损坏的修复修复内容修复在 DROP 物化视图之后执行 SELECT 查询可能失败的 bugfound in #30691pull request #30997。物化视图在 ClickHouse 中本质上是「插入数据时自动填充的隐藏目标表 附属的存储结构」。当物化视图被 DROP 后其关联的存储结构如表级 TTL、分区信息、依赖的列集合等可能仍残留在相关对象的元数据引用中导致后续对该数据列的 SELECT 在计划/执行阶段引用已失效的对象。从实现看该问题与物化视图的列/依赖管理有关——物化视图声明了输出列集合DROP 后这些列信息若未在对应表中正确清理就会破坏后续查询计划。修复后即使频繁创建/删除物化视图也不会影响普通表的查询可用性。五、StorageMerge别名与 WHERE 条件的组合修复修复内容修复StorageMerge与别名aliases和 WHERE 条件组合时完全不生效的问题closes #28802pull request #31044。StorageMerge引擎把多个同构表虚拟合并为一个逻辑表查询时需要在内部遍历所有子表。其查询下推逻辑非常复杂相关实现见 StorageMerge.cpp其中包含supportsPrewhere()第 399 行、canMoveConditionsToPrewhere()第 414 行、supportedPrewhereColumns()第 429 行等一组对子表条件判断与下推的支持函数并在查询计划阶段为每个子表克隆查询树、处理别名第 1053–1140 行区域。本修复解决的问题是当查询对 Merge 表使用了列别名SELECT x AS y ... WHERE y ...并叠加 WHERE 过滤时别名解析与条件下推产生冲突导致过滤条件完全没有作用。修复后别名列上的 WHERE 条件可以正确下推到各子表执行PREWHERE 相关优化在存在别名时也能安全生效。对使用 Merge 表做多分区表统一查询的用户这是必须升级的修复项。六、Keeper 启动失败修复快照与日志一致性修复内容修复 Keeper 在部分协调日志丢失、且已有快照比最新日志更新时无法启动的问题pull request #31150。底层机制ClickHouse Keeper 的持久化由「快照snapshot 协调日志changelog」共同构成相关实现与参数位于日志读写 Changelog.cpp其中包含快照与日志拼接恢复stitch_state、last_log_read_result等逻辑见第 964–1100 行区域快照加载 KeeperStorage.cpp 的loadFromSnapshot()第 319 行起通过reader.old_snapshot_zxid记录旧快照的事务 ID关键参数 CoordinationSettings.cpp如snapshot_distance默认 100000即积累多少条日志后写一次快照、snapshots_to_keep默认保留 3 份压缩快照、stale_log_gap落后阈值、compress_snapshots_with_zstd_format快照压缩格式等。故障场景正常情况下恢复过程是「加载最新快照 → 从快照之后的日志索引开始重放 changelog」。但当部分协调日志文件丢失且磁盘上残留的快照比现存最新日志还新时恢复逻辑需要拼接新旧日志段与快照此时若索引衔接处理不当例如快照 zxid 大于日志可重放的起点Keeper 会因无法构造连续的日志序列而在启动阶段失败形成「进程无法拉起」的严重故障。验证与运维建议升级后可通过重启 Keeper 并检查启动日志确认恢复正常对 Keeper 数据目录快照 changelog 文件应保持snapshots_to_keep、snapshot_distance等默认参数避免因磁盘清理误删 changelog 而触发该场景该修复对「快照比日志新」这一特定错位做了兜底但日常运维仍应以完整备份快照目录与 changelog 目录为准则。七、GROUP BY 与位置参数positional arguments组合修复修复内容修复 GROUP BY 与位置参数组合使用时的 bugcloses #31280pull request #31420。ClickHouse 支持位置参数语法即GROUP BY 1, 2表示按 SELECT 列表中的第 1、2 个表达式分组。此前该语法与某些查询形态如 GROUP BY 中包含常量、别名或与聚合函数组合组合时位置参数解析会计算出错误的列导致分组键错位、结果集错误。修复后位置参数与常规列名/表达式在分组语义上保持一致。对依赖GROUP BY 1, 2快捷语法的 BI 报表类查询建议升级后抽样比对修复前后的聚合结果。八、配置项改进remote_filesystem_read_method 取值重命名修复/改进内容将设置项remote_filesystem_read_method的取值read_threadpool重命名为threadpoolpull request #31224。配置项现状以当前仓库为准在 src/Core/Settings.cpp 中该设置的定义为Method of reading data from remote filesystem, one of: read, threadpool.默认值为threadpool可选值为read与threadpool两种该设置控制从远程文件系统如 S3、HDFS 等对象/分布式存储读取数据的方式read为直接读取threadpool为将读取任务交给线程池并行执行。与它配套的线程池大小参数是 src/Core/ServerSettings.cpp 中的threadpool_remote_fs_reader_pool_size默认 250 线程其注释明确说明它服务于remote_filesystem_read_method threadpool时的远程读取线程池。在 src/IO/ReadBufferFromS3.cpp 的注释中也印证当remote_filesystem_read_method threadpool时对于 MergeTree 家族的远程读取会走线程池并发路径配合remote_filesystem_read_prefetch默认 true等设置实现预取流水线。重命名的意义read_threadpool这一历史命名与本地文件系统的pread_threadpool方法容易混淆且「read_」前缀冗余。重命名后老取值read_threadpool被threadpool取代升级后若配置文件中仍显式写有read_threadpool需同步改为threadpool否则可能回退到默认值或告警对未显式配置该参数的用户无感知默认值即threadpool。九、内部修复远程磁盘读取、异步缓冲区与 BloomFilter 索引变更日志的NOT FOR CHANGELOG / INSIGNIFICANT章节包含三项内部修复Fix threadpool read for remote diskspull request #31112——修复远程磁盘上 threadpool 读取路径的缺陷与上文的remote_filesystem_read_method threadpool直接相关属于对同一功能的持续加固Fix check in async bufferpull request #31325——修复异步缓冲区中的检查逻辑涉及 src/IO 下的异步读写缓冲区如 ReadBufferFromS3 等基于异步 I/O 的实现主要是边界条件与错误处理路径的修正BloomFilter index check fixpull request #31334——修复布隆过滤器BloomFilter索引的检查逻辑。BloomFilter 是 MergeTree 家族的二级索引skip index用于跳过不包含目标值的 granule其定义与实现位于 src/Storages/MergeTree 下的索引相关文件中。该修复保证索引判定与列数据实际内容一致避免误跳过数据导致查询结果缺失。这三项虽然不对外宣传但分别关系到远程存储读取的正确性、异步 I/O 的健壮性与二级索引的准确性同样是稳定版用户值得升级的理由。十、升级建议与回归验证清单综合本版本的修复面建议按以下清单验证升级关注点验证方式SHOW GRANTS对启用了列级/部分撤销权限的用户执行SHOW GRANTS核对输出与授权意图一致集合运算对含 INTERSECT/EXCEPT 及空集、嵌套、ORDER BY/LIMIT 组合的查询做结果比对物化视图执行 DROP 物化视图后再运行常规 SELECT确认查询不受影响StorageMerge对 Merge 表执行带列别名与 WHERE 的查询确认过滤生效Keeper检查是否有损坏/缺失的 changelog重启 Keeper 验证可正常拉起GROUP BY 位置参数抽样比对GROUP BY 1, 2类查询聚合结果远程读取配置将配置中的remote_filesystem_read_method旧值read_threadpool改为threadpool该版本作为 21.11 稳定分支的补丁不改变现有 SQL 语义与大版本行为可视为一次低风险、高收益的升级。完整的补丁说明可查阅 v21.11.4.14-stable 变更日志更多历史发布记录见 changelogs 归档目录。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表