| name | doris-debug-materialized-view |
| description | Use for Doris sync MV (rollup) miss or async MTMV refresh/rewrite issues. Commands: SHOW ALTER TABLE MATERIALIZED VIEW, mv_infos(), EXPLAIN, REFRESH MATERIALIZED VIEW.
|
| version | 0.2.0 |
| category | materialized-view |
Materialized View
Kind comparison
| Kind | Code area | Check | Rewrite mechanism |
|---|
| Sync | MaterializedViewHandler / rollup | SHOW ALTER TABLE MATERIALIZED VIEW | Transparent — planner auto-selects |
| Async MTMV | fe/.../mtmv/ | mv_infos() RefreshState | CBO-based — EXPLAIN shows if matched |
Causes
| ID | Cause | Evidence | Kind |
|---|
| A | Sync MV build pending/stuck | SHOW ALTER TABLE MATERIALIZED VIEW State≠FINISHED | Sync |
| B | MTMV refresh failed | mv_infos() RefreshState=FAIL | Async |
| C | MTMV rewrite miss | EXPLAIN shows no MATERIALIZED_REWRITE | Async |
| D | MTMV data stale | mv_infos() LastRefreshTime old | Async |
| E | MV not selected by planner | EXPLAIN shows TABLE SCAN not MATERIALIZED | Either |
10 min triage
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;
Cause C — MTMV rewrite miss
Common reasons (see fe/.../mtmv/MTMVService.java rewrite matcher):
- Partition misalignment: MV has
partition_sync=false and query partition doesn't match → ALTER MATERIALIZED VIEW mv SET ("partition_sync" = "true")
- Aggregation granularity: MV groups by
(a, b) but query groups by (a) only → MV is not a valid rewrite target
- Filter mismatch: MV WHERE clause doesn't cover query WHERE clause → check MV definition
- Session var off:
SET enable_materialized_view_rewrite = true
SET enable_materialized_view_rewrite_debug_log = true;
EXPLAIN VERBOSE SELECT ...;
Cause A — Sync MV stuck
CANCEL ALTER TABLE MATERIALIZED VIEW FROM db ON table;
./scripts/doris-debug be-metrics
Source
fe/.../mtmv/MTMVService.java — MTMV lifecycle
fe/.../alter/MaterializedViewHandler.java — sync MV alter
fe/.../materializedview/MaterializedViewRewriter.java — rewrite logic
SessionVariable.java — enable_materialized_view_rewrite, materialized_view_rewrite_enable_contain_external_table