ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

ClickHouse v26.1.11.9-stable 修复解析:查询解析、CPU 调度、文件缓存与可刷新物化视图的稳定性改进

ClickHouse v26.1.11.9-stable 修复解析:查询解析、CPU 调度、文件缓存与可刷新物化视图的稳定性改进 数据库OLAP列式数据库大数据实时分析数据分析【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址https://gitcode.com/GitHub_Trending/cli/ClickHouse点击查看免费下载本文围绕 ClickHouse 官方稳定版 v26.1.11.9-stable提交1784404a5ac相对上一稳定版 v26.1.10.2-stable提交ebbf25cf806的 7 项变更展开逐一解读 6 个用户可见的 Bug 修复与 1 项构建/打包改进。读者可以借此理解ASTColumnsExceptTransformer、StringSearcher、CPU Lease 调度器、文件系统缓存 SLRU 策略、Named Collection 指标、行策略Row Policy与SYSTEM WAIT VIEW的底层实现与边界场景从而在升级后更好地规避同类问题、理解排查思路。版本变更总览本次发布属于 26.1 分支的补丁迭代全部变更均以 Backported回溯移植方式进入本版本即修复先合入主分支再移植到 26.1 稳定分支。变更清单如下类别变更内容关联 PRBug Fix修复ASTColumnsExceptTransformer::transform中的 LOGICAL_ERROR 异常#99119Bug Fix修复StringSearcher.h中的未初始化值使用use-of-uninitialized-value#100225Bug Fix修复 CPU Lease 调度器中等待定时器超过 worker 线程生命周期导致的 use-after-free#101761Bug Fix修复文件系统缓存 26.1 的 SLRU 竞态避免空间预留逻辑错误#101991Bug Fix修复NamedCollection的CurrentMetric被CREATE NAMED COLLECTION IF NOT EXISTS错误膨胀、启动时未初始化的问题#102598Bug Fix修复行策略row policy在特殊情况下抛 Not found column in block 异常#102648Build/Testing升级依赖 OpenSSL 至 3.5.6#102606下面按功能域分组展开。查询解析与执行层修复ASTColumnsExceptTransformer的 LOGICAL_ERROR在SELECT COLUMNS(regexp) EXCEPT ...这类列变换Column Transformers场景中ASTColumnsExceptTransformer::transform可能抛出LOGICAL_ERROR异常。该逻辑位于 src/Parsers/ASTColumnsTransformers.cpp其中定义了APPLY、EXCEPT、REPLACE等列变换器并通过 src/Interpreters/applyColumnsTransformer.cpp 在查询规范化/分析阶段对COLUMNS()表达式展开。此次修复PR #99119针对变换器在处理嵌套或特殊列集合时的内部状态一致性做了加固避免在展开EXCEPT子句时产生内部断言级别的错误。从源码结构看ASTColumnsExceptTransformer的transform会基于输入列集合做集合差运算若输入列集合与预期状态不一致例如同时叠加APPLY前缀或 lambda 时就可能触发逻辑错误这也是本次补丁的核心目标。StringSearcher.h的未初始化值使用StringSearcher是 ClickHouse 字符串匹配的基础设施位于 src/Common/StringSearcher.h被LIKE/position/countSubstrings/replaceAll等大量函数间接使用参见 src/Functions/PositionImpl.h、src/Functions/ReplaceStringImpl.h。该头文件中的CaseSensitiveStringSearcher在短 needle长度 32 字节场景下采用简单循环逐字节比较避免函数调用与 mask 准备工作在USE_MULTITARGET_CODE与 AVX2/NEON 环境下还会使用 SIMD 加速路径。本次修复PR #100225消除了一处未初始化值的使用在特定输入如 needle 与 haystack 长度关系特殊、或 SIMD 路径读取越界数据下比较逻辑可能读到未初始化的栈/内存值从而产生不可预测的匹配结果在 SanitizerMSan构建下会直接暴露。修复后匹配路径在所有输入组合下均使用确定值。行策略的 Not found column in block 异常行策略Row Policy用于对表访问按行做细粒度过滤其条件表达式在查询执行时被注入到读取阶段。当策略条件中的列在某些特殊查询形态下如子查询、PREWHERE优化、物化列等未随数据块一起传递时会抛出 Not found column in block 异常。本次修复PR #102648确保策略所需列在块处理链中始终可用从列注入与块校验两方面规避了偶发失败。调度与缓存层修复CPU Lease 调度器的 use-after-freeCPU 调度资源管理Workload Scheduling是 26.x 引入的重要能力核心实现位于 src/Common/Scheduler/CPULeaseAllocation.cpp 与 src/Common/Scheduler/CPULeaseAllocation.h。调度器以租赁Lease为单位为线程分配 CPU 配额CPULeaseAllocation::Lease持有一个slot_id并引用父分配对象析构时通过parent-release(*this)归还配额。该模块还依赖ProfileEvents::Counters统计ConcurrencyControlWaitMicroseconds、ConcurrencyControlPreemptions等指标。本次修复PR #101761针对的正是这类对象生命周期问题当 CPU Lease 调度器的等待定时器wait timer存活时间超过其引用的 worker 线程线程退出后ProfileEvents::Counters被销毁时定时器回调会访问已释放的内存造成 use-after-free 崩溃。修复的核心是确保定时器在持有计数器引用的线程结束前被取消或解除引用从而切断悬挂引用。从 src/Processors/Executors/Runtime/PipelineExecutor.cpp 对 CPULeaseAllocation 的使用来看该路径覆盖 INSERT 与查询执行线程崩溃影响面包括常规查询与写入负载。文件系统缓存 SLRU 竞态ClickHouse 的本地文件系统缓存filesystem_cache对应local_filesystem_read_method与缓存配置在 26.1 默认使用 SLRUSegmented LRU淘汰策略实现位于 src/Common/SLRUCachePolicy.h 与 src/Interpreters/FileCache/SLRUFileCachePriority.cpp。与普通 LRU 不同SLRU 将缓存分为保护段protected与试用段probationary仅被访问过一次的条目放在试用段容易被顺序扫描淘汰被访问多次的条目升级到保护段避免被大范围扫描一次性逐出。max_protected_size默认取总容量的一半见 src/Common/SLRUCachePolicy.h。本次修复PR #101991解决的是一个并发竞态并发读取同一缓存段时SLRU 优先级状态机可能从Active被错误地置为Evicting导致空间预留space reservation逻辑错误在 Debug 构建下会触发断言Previous state is Evicting, but expected state to be Active while setting Evicting flag for segment:offset (state: Evicting)。修复后段状态切换在锁内严格校验前序状态消除了并发下缓存容量记账偏差与断言失败。相关的段状态管理可参见 src/Interpreters/FileCache/FileSegment.cpp 与 src/Interpreters/FileCache/Guards.h。系统管理与运维层修复Named Collection 的 CurrentMetric 指标错误Named Collection 允许把一组连接参数如 URL、认证信息集中命名并在建表/函数调用时复用。本次修复PR #102598解决了两类指标问题对已存在的 collection 执行CREATE NAMED COLLECTION IF NOT EXISTS时CurrentMetric计数被重复累加膨胀从配置文件或 SQL 存储system.named_collections加载的 collection 在启动阶段没有初始化该指标导致统计缺失。该指标用于跟踪当前活跃的命名集合数量膨胀或缺失都会干扰监控告警。修复关闭 issue #102507统一了三条创建路径DDL 新建、配置文件加载、SQL 存储加载的指标初始化逻辑使IF NOT EXISTS在命中已有对象时不再重复计数。SYSTEM WAIT VIEW永久挂起SYSTEM WAIT VIEW用于等待可刷新物化视图Refreshable Materialized View完成当前刷新周期其等待逻辑集中在 src/Storages/MaterializedView/RefreshTask.cpp 的RefreshTask::wait约第 630 行起。该函数的注释明确指出其等待逻辑需要处理多种复杂情形如SYSTEM REFRESH VIEW后等待指定刷新、视图被 DROP 等。此前存在一个挂起场景当WAIT VIEW正在进行时若视图被 DROP后台刷新任务被停用deactivate后不再通知条件变量导致wait()永久阻塞。本次修复PR #102681在 DROP 路径上增加了唤醒机制RefreshTask析构/停用时会调用wait_cv.notify_all()唤醒所有阻塞在wait()中的线程使其感知到视图已不存在并抛出TABLE_IS_DROPPED而不是无限期等待参见 src/Storages/MaterializedView/RefreshTask.cpp 附近对 DROP 时RefreshSet移除与唤醒的注释说明。修复后DDL 与等待命令之间不再互相死锁。构建与打包改进OpenSSL 3.5.6本版本将内置的 OpenSSL 依赖升级到 3.5.6。ClickHouse 通过contrib/openssl第三方源码子模块与 contrib/openssl-cmake/CMakeLists.txt 集成了 OpenSSL该 CMake 脚本会从common/include/openssl/opensslv.h中解析OPENSSL_VERSION_STR宏并输出版本号同时将fipsmodule.conf等运行时配置文件安装到 ClickHouse 的 etc 目录。升级 3.5.6 属于安全与稳定性跟进涉及 TLS 连接、HTTP/HTTPS 接口与各类外部存储认证等加密路径建议在升级本版本后重新验证对外 TLS 服务的握手与证书链行为。升级建议v26.1.11.9-stable 属于 26.1 分支的补丁版本建议在测试环境先行验证后再对生产节点滚动升级。若生产环境使用文件系统缓存并曾在 Debug 构建下观察到 SLRU 断言Evicting状态相关本次 SLRU 竞态修复PR #101991值得重点关注。若曾遇到SYSTEM WAIT VIEW命令偶发卡死或 Named Collection 相关监控指标异常可直接受益于本次对应修复。开启 Workload SchedulingCPU 调度且线程生命周期与定时器交互复杂的场景建议升级以规避潜在的 use-after-free 崩溃。升级后建议通过system.named_collections、system.metricsConcurrencyControl 系列指标与行策略相关的system.row_policies做一次健康检查确认计数与策略行为符合预期。延伸阅读完整的变更历史记录在 docs/changelogs 目录下可按版本号检索对应的发布说明可刷新物化视图的刷新任务实现 src/Storages/MaterializedView/RefreshTask.cpp字符串搜索基础设施 src/Common/StringSearcher.h、src/Common/Volnitsky.hSLRU 缓存策略 src/Common/SLRUCachePolicy.hCPU 租赁分配器 src/Common/Scheduler/CPULeaseAllocation.h。赞分享数据库OLAP列式数据库大数据实时分析数据分析【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址https://gitcode.com/GitHub_Trending/cli/ClickHouse点击查看免费下载相关推荐ClickHouse v25.6.10.16-stable 发布解析Keeper 递归删除优化、物化视图修复与稳定性改进ClickHouse v25.6.10.16 stable 发布解析Keeper 递归删除优化、物化视图修复与稳定性改进 本文基于 ClickHouse 官方数据库OLAP列式数据库大数据实时分析数据分析ClickHouse v26.1.3.52-stable 版本更新详解S3Queue 元数据缓存、Variant/JSON 修复与分布式查询稳定性改进ClickHouse v26.1.3.52 stable 版本更新详解S3Queue 元数据缓存、Variant/JSON 修复与分布式查询稳定性改进 本文基数据库OLAP列式数据库大数据实时分析数据分析ClickHouse v25.12.4.35-stable 版本解析稳定性修复、去重语义重构与可刷新物化视图备份策略ClickHouse v25.12.4.35 stable 版本解析稳定性修复、去重语义重构与可刷新物化视图备份策略 v25.12.4.35 stable 是数据库OLAP列式数据库大数据实时分析数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表