SuperAPI AI 工具集

doris-debug-materialized-view

测试与质量

查看项目

更新于 10-15 16:51

技能介绍

用途:排查 Apache Doris 物化视图问题,分为同步 MV(rollup)与异步 MTMV 两类场景,覆盖构建未完成、刷新失败、改写未命中、数据过期与计划器未选用等方向。

主要能力与判断依据:同步 MV 由 MaterializedViewHandler/rollup 处理,通过 SHOW ALTER TABLE MATERIALIZED VIEW 查看 State 是否 FINISHED,改写由计划器透明自动选择。异步 MTMV 位于 fe/.../mtmv/,通过 mv_infos() 查看 RefreshState 与 LastRefreshTime,改写基于 CBO,由 EXPLAIN 判断是否匹配。

常见原因:A 同步 MV 构建挂起或未完成;B MTMV 刷新失败(RefreshState=FAIL);C MTMV 改写未命中(EXPLAIN 无 MATERIALIZED_REWRITE);D MTMV 数据过期(LastRefreshTime 偏旧);E 计划器未选择 MV(EXPLAIN 显示 TABLE SCAN 而非 MATERIALIZED)。

十分钟分诊命令:SHOW ALTER TABLE MATERIALIZED VIEW FROM db; 以及 SELECT * FROM mv_infos('database'='db') WHERE Name='mv'\G;用 EXPLAIN VERBOSE SELECT ...; 检查改写资格;用 REFRESH MATERIALIZED VIEW mv; 强制刷新;查询外部表时可 SET materialized_view_rewrite_enable_contain_external_table = true;。

改写未命中的常见原因与处理:分区不一致时对 partition_sync=false 的 MV 执行 ALTER MATERIALIZED VIEW mv SET ("partition_sync" = "true");聚合粒度不匹配(MV 按 (a,b) 分组而查询仅按 (a))时 MV 不是有效改写目标;MV 的 WHERE 子句未覆盖查询条件时需检查定义;会话变量关闭时 SET enable_materialized_view_rewrite = true。可用 SET enable_materialized_view_rewrite_debug_log = true; 配合 EXPLAIN VERBOSE 在 fe/log/fe.audit.log 查看匹配细节。

同步 MV 卡住时可用 CANCEL ALTER TABLE MATERIALIZED VIEW FROM db ON table; 取消构建,并用 ./scripts/doris-debug be-metrics --be http://$BE:8040 --grep compaction 查看 BE compaction 队列(MV 构建与 compaction 竞争)。

参考源码:MTMVService.java、MaterializedViewHandler.java、MaterializedViewRewriter.java、SessionVariable.java。限制:技能资料未提供版本兼容范围与具体环境前提。