ARTICLE DETAIL

资讯详情

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

ClickHouse v23.12.2.59-stable 更新解析:clean_deleted_rows 弃用与 MergeTree 稳定性修复

ClickHouse v23.12.2.59-stable 更新解析:clean_deleted_rows 弃用与 MergeTree 稳定性修复 ClickHouse v23.12.2.59-stable 更新解析clean_deleted_rows 弃用与 MergeTree 稳定性修复【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本篇解读 ClickHouse v23.12.2.59-stable 相对 v23.12.1.1368-stable 的完整变更清单一条向后不兼容的 MergeTree 行为调整clean_deleted_rows弃用、OPTIMIZE ... CLEANUP收紧与五项用户可见的 Bug 修复。读完本文你将了解该版本每项变更的实际影响范围、涉及的源码位置以及在升级 23.12 分支前需要做哪些配置与脚本层面的自查。版本概览依据 v23.12.2.59-stable 变更记录本次发布基于提交17ab210e761对比基线为 v23.12.1.1368-stablea2faa65b080。变更按 ClickHouse 官方 changelog 分类约定分为四类分类含义本版本条目数Backward Incompatible Change向后不兼容变更升级后行为变化1Bug Fix用户可见的误行为修复官方 stable 发布中出现的5NO CL ENTRY合入代码但不写入 changelog 的变更1NOT FOR CHANGELOG / INSIGNIFICANT脚本、测试、维护性修改5下面按分类逐项展开并结合当前仓库源码验证关键实现。向后不兼容变更clean_deleted_rows弃用与 CLEANUP 合并收紧本次发布唯一一条向后不兼容变更内部关联 issue #58389修复 PR #58316包含两层含义MergeTree 表设置clean_deleted_rows被标记为废弃不再产生任何效果OPTIMIZE语句的CLEANUP关键字默认不再允许使用除非显式启用allow_experimental_replacing_merge_with_cleanup。这条变更在语义上宣告了 ReplacingMergeTree 早期“在合并时物理清理删除行”实验路径的收尾。在 MergeTreeSettings.cpp 中可以看到clean_deleted_rows已被移入 OBSOLETE废弃设置列表默认值固定为CleanDeletedRows::NeverMAKE_OBSOLETE_MERGE_TREE_SETTING(M, CleanDeletedRows, clean_deleted_rows, CleanDeletedRows::Never) \被弃用的路径由新的实验性开关接替。在 MergeTreeSettings.cpp#L2307-L2327 中allow_experimental_replacing_merge_with_cleanup的说明明确给出了替代方案的行为边界DECLARE(Bool, allow_experimental_replacing_merge_with_cleanup, false, R( Allow experimental CLEANUP merges for ReplacingMergeTree with is_deleted column. When enabled, allows using OPTIMIZE ... FINAL CLEANUP to manually merge all parts in a partition down to a single part and removing any deleted rows. Also allows enabling such merges to happen automatically in the background with settings min_age_to_force_merge_seconds, min_age_to_force_merge_on_partition_only and enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. ), EXPERIMENTAL)从这段设置文档可以看出启用后OPTIMIZE ... FINAL CLEANUP才允许对带is_deleted列的 ReplacingMergeTree 分区执行“合并到单 part 并物理删除已标记删除行”的合并除手动触发外还可与min_age_to_force_merge_seconds、min_age_to_force_merge_on_partition_only、enable_replacing_merge_with_cleanup_for_min_age_to_force_merge组合让后台合并按策略自动执行 CLEANUP 合并该开关带有EXPERIMENTAL标志默认值为false。CLEANUP关键字本身仍存在于语法层面。从 ParserOptimizeQuery.cpp#L37 可以看到解析器中仍注册了ParserKeyword s_cleanup(Keyword::CLEANUP)查询语法帮助中也保留了OPTIMIZE TABLE [db.]name DRY RUN PARTS part_name1, part_name2 [, ...] [DEDUPLICATE [BY expression]] [CLEANUP]的形式见 ParserOptimizeQuery.cpp#L187。也就是说语法上CLEANUP依旧可被解析但执行是否放行取决于上述实验性设置的开关状态。升级自查建议如果你的建表语句或users.xml/ 配置文件中仍保留clean_deleted_rows在升级到本版本后该参数将静默失效不再报错但也不再生效依赖OPTIMIZE ... CLEANUP收缩已删除行占用的自动化脚本需要改为依赖 ReplacingMergeTree 自身的去重合并语义或显式评估是否启用实验性 CLEANUP 合并路径。Bug Fix五项用户可见问题修复1.flatten_nested只展平真正的 Nested 类型不再误伤所有Array(Tuple)PR #56132修复前当flatten_nested 1时除真正的Nested类型外普通Array(Tuple)列也会被错误地展平。flatten_nested是一个会话级设置在 Settings.cpp#L5780 中声明默认值为trueDECLARE(Bool, flatten_nested, true, R(...)设置文档中的示例表明其设计意图是对含Nested列的表默认以SET flatten_nested 1;把Nested列展开为顶层的Array别名方便直接查询而SET flatten_nested 0;则保留原有嵌套访问方式。本次修复把展平行为限定在“真正的Nested类型”上避免了该默认开启的设置对普通Array(Tuple)列产生副作用。2. StreamingFormatExecutor 读取缓冲区工作异常修复PR #57438修复了流式格式执行器StreamingFormatExecutor在处理读取缓冲区时的错误行为。该执行器负责文件/流读取场景下的逐行解码管线本次修复属于读取路径的正确性问题影响面为依赖流式读取的格式处理链路。3. 删除含损坏 detached part 的副本后 blob 丢失修复PR #58333修复了副本删除drop replica路径上的资源泄漏当副本中存在损坏的 detached part 时删除副本后相关数据 blobS3 等对象存储上的数据文件未被正确清理回收。该修复使“删除副本”这一运维操作在存在损坏 part 的边界条件下也能完成存储侧的清理闭环避免出现对象存储中残留无人引用的数据文件。4. Graphite 表缺少聚合函数时的段错误修复PR #58453Graphite 数据导入依赖表结构中的聚合函数此前当 Graphite 表未配置聚合函数时会触发段错误segfault。本次修复消除了这一崩溃路径使非法表结构场景下能够以错误提示而非进程崩溃的方式暴露问题。5. 纯 LIMIT 查询禁用 MergeTreePrefetchedReadPoolPR #58505针对“只带 LIMIT 的查询”这类轻量查询禁用了MergeTreePrefetchedReadPool带预取能力的读取池。在 ReadFromMergeTree.cpp#L745 中可以看到对应的启用条件bool use_prefetched_read_pool query_info.trivial_limit 0 (allow_prefetched_remote || allow_prefetched_local);即只有当trivial_limit为 0不是单纯 limit 查询且满足本地/远程文件系统预取条件时才会构造MergeTreePrefetchedReadPool。这一改动避免了轻量 limit 查询无谓地进入预取读取池的开销路径。NO CL ENTRY回滚 Refreshable 物化视图接管方案PR #58296本版本包含一次不进入 changelog 的代码回滚撤销了 “Refreshable materialized views (takeover)” 的引入。从条目内容看这是针对 Refreshable 物化视图接管takeover机制的一次回退意味着本 stable 版本不包含该新机制的行为。对于关注物化视图能力的用户以本版本实际发布代码为准。维护性变更NOT FOR CHANGELOG / INSIGNIFICANT以下条目不影响功能行为属于发布工程与测试维护此处按原文完整列出以保证变更清单的完整性修复发布脚本错误——此前该脚本不允许发布 23.12 分支PR #58288在 v23.12.1.1368-stable 发布后更新version_date.tsv与各 changelogPR #58290修复test_storage_s3_queue/test.py::test_drop_table测试用例PR #58293处理 Keeper 预处理preprocessing的另一种场景PR #58308修复test_user_valid_until测试用例PR #58409。小结升级该版本需要关注什么clean_deleted_rows已废弃出现在建表参数或配置中的该设置不再起作用可在配置清理中移除OPTIMIZE ... CLEANUP默认不可用依赖 CLEANUP 合并的脚本需要评估是否启用allow_experimental_replacing_merge_with_cleanup或改用 ReplacingMergeTree 常规去重合并五项 Bug 修复分别覆盖flatten_nested展平边界、流式读取、副本删除的资源回收、Graphite 导入崩溃与轻量查询的读取池启用逻辑若你的环境命中上述任一场景本次升级可直接消除对应故障Refreshable MV takeover 被回滚本版本不包含该实验机制。如需核对完整原始条目可查阅 v23.12.2.59-stable 变更记录相关实现的源头集中在 MergeTree 设置定义、MergeTree 读取计划 与 OPTIMIZE 查询解析器 等文件中。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表