操作手册 · 大数据运维

待环境验证

StarRocks 物化视图刷新与数据新鲜度

按任务链和分区覆盖解释 StarRocks 异步视图刷新,区分同步调用、透明重写与陈旧容忍,核对维表修订和业务截止点。

StarRocks大数据监控告警
阅读导引 · 理解后再操作

这篇知识解决什么问题

从业务截止点解释 StarRocks 异步物化视图的新鲜度,分别核对调度、完成、分区覆盖和透明重写。WITH SYNC MODE 只是等待一次刷新,并不会把视图改成同步维护机制。

调用成功和任务完成不同

异步刷新调用提交后还要观察任务链,同步调用只等待该次任务结束。多个 task_runs 可能组成一次分区刷新,必须把子任务和整体状态关联起来,而不是把最新一行 SUCCESS 当作完整刷新。

新鲜度由依赖与范围共同决定

定时频率无法说明某个历史分区是否已修订,维表变化也可能影响更广范围。陈旧容忍属性改变重写资格而非刷新进度,直接查询视图仍需标明数据截止点和实际依赖版本。

进入文章正文
关联架构图解5 个组件 · 点击展开

配图中 FE 到 BE 或 CN 的分支对应刷新执行位置;shared-data 还需补充缓存与远端读取证据。两条模式分支用于选择,不是混合部署图,也不展示物化视图每个子任务的刷新范围与数据版本。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

StarRocks 存算模式与导入查询运维架构

先辨别 shared-nothing 与 shared-data,再检查 FE、BE 或 CN、导入与主键更新、查询 Profile 和存储恢复边界。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

StarRocks 存算模式与导入查询运维架构:组件关系图先辨别 shared-nothing 与 shared-data,再检查 FE、BE 或 CN、导入与主键更新、查询 Profile 和存储恢复边界。 导入与查询客户端 → FE 计划与元数据:入口与计划;FE 计划与元数据 → BE 本地存储:存算一体调度;FE 计划与元数据 → CN 计算与缓存:存算分离调度;CN 计算与缓存 → 共享存储:远端持久数据访问;导入与查询客户端 → BE 本地存储:一体模式导入路径;导入与查询客户端 → CN 计算与缓存:分离模式导入路径。箭头说明见下方流向解读。
逻辑参考图,待环境验证。覆盖 StarRocks 3.3+ 常见架构,操作前对照实际小版本。shared-nothing 使用 BE 本地存储与副本,shared-data 使用 CN 计算、共享存储及本地缓存;两条分支独立核验。

导入与查询客户端

入口 / 来源

明确输入批次、更新顺序和业务可见性。

全部组件职责 5 个组件
导入与查询客户端
明确输入批次、更新顺序和业务可见性。
FE 计划与元数据
两种模式均需 FE 管理元数据和查询计划。工具介绍 FE 计划与元数据
BE 本地存储
存算一体通过 BE 维护本地 Tablet 和副本。工具介绍 BE 本地存储
CN 计算与缓存
存算分离通过 CN 计算并访问共享存储,本地缓存不是唯一数据副本。工具介绍 CN 计算与缓存
共享存储
持久数据由配置的共享存储保存,访问依赖存储卷和凭据。
流向解读 6 条连接
  1. 1

    导入与查询客户端 FE 计划与元数据

    数据 / 请求 · 入口与计划

    记录查询与导入的控制入口,数据路径按具体协议确认。

  2. 2

    FE 计划与元数据 BE 本地存储

    控制 / 管理 · 存算一体调度

    仅选择 shared-nothing 时采用该分支。

  3. 3

    FE 计划与元数据 CN 计算与缓存

    控制 / 管理 · 存算分离调度

    仅选择 shared-data 时采用该分支。

  4. 4

    CN 计算与缓存 共享存储

    数据 / 请求 · 远端持久数据访问

    CN 读取共享数据并利用本地缓存,区分远端延迟与计算耗时。

  5. 5

    导入与查询客户端 BE 本地存储

    数据 / 请求 · 一体模式导入路径

    逻辑表示客户端向 BE 导入,是否重定向或经过代理以具体导入方式为准。

  6. 6

    导入与查询客户端 CN 计算与缓存

    数据 / 请求 · 分离模式导入路径

    逻辑表示 shared-data 模式向 CN 导入;是否重定向及数据持久化路径以具体导入方式和存储配置为准。

故障域与操作边界

适用版本与部署模式

覆盖 StarRocks 3.3+ 常见架构,操作前对照实际小版本。shared-nothing 使用 BE 本地存储与副本,shared-data 使用 CN 计算、共享存储及本地缓存;两条分支独立核验。

数据与变更边界

不提供在线切换存算模式、批量删除节点或清空对象存储的通用命令。缓存可重建不代表 FE 元数据、存储卷凭据或业务数据可以丢弃。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与新鲜度契约

本文面向 StarRocks 3.3+ 内表上的异步物化视图,兼顾 shared-nothing 与 shared-data。新版本增加的状态字段和刷新模式不能直接套入旧补丁,外表的变化感知也需单独核对。本文只提供待验证示例,不执行刷新或业务 SQL,验证等级为 PENDING。

先记录基表及视图定义、业务事件时间、最新已确认源端位点、刷新范围和允许延迟。报表“每五分钟更新”必须说明是调度间隔、完成间隔还是业务数据落后量;三者不能用同一个时间字段替代。

同步视图与异步调用要分清

同步物化视图主要随基表写入维护单表预计算;异步物化视图支持更丰富的定义,通过任务刷新。给异步视图执行 REFRESH ... WITH SYNC MODE,只是调用方等待该次任务成功或失败,并没有把它改造成随写入维护的同步视图。

相反,WITH ASYNC MODE 返回时仅说明任务已提交,仍要检查后续结果。不要把客户端拿到成功响应当作全部分区更新完成。调用语义见 REFRESH MATERIALIZED VIEW

读取当前对象与任务入口

针对一个已知对象检查,避免从全库历史中猜测任务:

SHOW CREATE MATERIALIZED VIEW analytics.mv_orders_daily;
SHOW MATERIALIZED VIEWS FROM analytics
WHERE NAME = 'mv_orders_daily';

保存 is_activeinactive_reasontask_namelast_refresh_state 与开始结束时间。active 表示对象可参与相应功能,不代表数据已经追平。自 3.3 起,一次刷新涉及多个 task_runs 时,整体最近刷新 SUCCESS 要等待这些任务成功;仍需对照实际分区范围,见 SHOW MATERIALIZED VIEWS

从上一步复制真实 task_name 后查询有限记录:

SELECT QUERY_ID, TASK_NAME, CREATE_TIME, FINISH_TIME,
       STATE, ERROR_MESSAGE, EXTRA_MESSAGE
FROM information_schema.task_runs
WHERE TASK_NAME = 'REPLACE_WITH_OBSERVED_TASK_NAME'
ORDER BY CREATE_TIME DESC
LIMIT 10;

这些结果只覆盖保留下来的任务历史。先检查错误、排队与各子任务分区,再解释刷新耗时,不能因最后一行成功就忽略此前未补齐的数据。

定时频率不等于完成频率

分区刷新可以把一次维护拆成多个任务,任务数量不能直接作为刷新频率。partition_refresh_number 控制分批大小,auto_refresh_partitions_limit 控制自动维护的最近分区范围;后者可能让更早的历史修订留在刷新范围之外。

检查过去一段窗口的调度、执行、完成和基表变化时间,说明是否出现等待、任务合并或过期。若事实表只补一天而维表改动影响历史订单,应按依赖范围重新评估。常见状态与维护策略见 异步物化视图排障

透明重写需要单独验收

在已确认日分区与租户范围内,对原业务查询查看计划:

EXPLAIN
SELECT order_date, tenant_id, SUM(amount_minor)
FROM analytics.order_events
WHERE order_date = '2026-09-01' AND tenant_id = 42
GROUP BY order_date, tenant_id;

检查扫描对象是否确实是目标视图、是否存在基表补偿,以及过滤和聚合是否仍正确。视图 active、刷新成功、定义可重写与优化器最终选择是不同判断;不能用直接 SELECT 视图的速度证明原 SQL 已加速。结构匹配和限制见 物化视图查询重写

允许陈旧数据是一项业务选择

query_rewrite_consistency 决定重写一致性检查,mv_rewrite_staleness_second 可以允许一定陈旧程度。属性的具体判断应对照运行补丁的文档与实测;不要把它简化成“当前时间减上次结束时间”,也不要把放宽一致性理解为触发刷新。

loose 会放松一致性检查,不能为提升重写命中率直接开启。直接查询异步视图也不会自动获得基表最新结果,应独立标明数据截止点。状态字段不存在时应记录版本缺口,不把 Latest 新字段的名称当作生产可直接查询的字段,定义参见 CREATE MATERIALIZED VIEW

小分区试点与维表变化

在隔离环境选择封闭的单日事实分区,准备已知订单与固定维表版本。分别验证新增订单、修改旧订单、删除和维表分类修订:每项都保存变化前后结果,以及实际受影响的视图分区。维表只改名称时,也可能改变 GROUP BY 输出键,不能只核对总额。

需要演练手动刷新时,可评审下列仅针对隔离内表视图的候选语法,本篇不执行:

REFRESH MATERIALIZED VIEW lab.mv_orders_daily
PARTITION START ('2026-09-01') END ('2026-09-02')
WITH SYNC MODE;

先核实目标分区映射与实际刷新范围,外表不沿用这个范围承诺。同步等待仍会消耗后台资源,客户端超时也不自动代表任务失败;保留任务 ID 后查询原任务,避免反复提交。

常见误区与资源干扰

shared-data 的刷新还可能受到远端读取与缓存冷热影响,冷缓存刷新耗时不能直接与热缓存比较。缩短周期会增加读写和调度竞争,应先解释扫描量、Join 基数与刷新分区,再决定是否修改策略。

对账时如果基表查询也被重写到待验证视图,两边相同不构成独立证明。基线应来自计划确认的基表路径或同版本隔离快照。仅比较总额也会漏掉重复与漏数相互抵消、维度归属错误和 NULL 转默认值问题。

验收、停止与回退

交付应包含视图定义、实际补丁、最近完整任务链、业务截止点、原 SQL 计划以及分区对账。通过标准同时要求正确结果、允许延迟、刷新覆盖和可接受资源成本,未运行的变更样本继续标为待验证。

若陈旧数据进入关键报表、刷新意外扩大、子任务失败或源端窗口不再封闭,停止推广。恢复原查询路径或经过验证的视图配置,保留当前对象与任务证据;取消任务不能撤销已完成分区,也不能回滚源表。进一步对账见 OLAP 指标一致性

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 每五分钟调度,但任务记录间隔更短且旧分区仍未更新。

    只读核对
    检查 task_name、各次 EXTRA_MESSAGE 与 partition_refresh_number、自动刷新范围配置。
    如何判读
    可能是分批任务和有限历史覆盖,不能按记录数量推断完整刷新频率。
  2. 视图 active 且一次刷新成功,原 SQL 仍扫描基表。

    只读核对
    检查定义、重写一致性要求、实际查询计划与涉及分区的版本。
    如何判读
    可用状态、刷新结果和最终计划是独立条件,不应为追求命中率直接放松一致性。
  3. 事实总额相同,商户分类修订后的分组结果却与业务预期相反。

    只读核对
    固定维表版本,核对变化触发、刷新分区及独立基线的关联时间。
    如何判读
    可能是维度物化时间或覆盖范围差异,仅校验总额不能证明归属正确。
常见误区与判断边界 2 项

WITH SYNC MODE 等于同步视图

该语法控制手动刷新调用何时返回,并没有改变异步视图维护方式。客户端超时也不证明后台失败,应保留真实任务标识再查看状态,避免反复提交同范围任务。

用 loose 消除新鲜度异常

放松一致性检查会改变报表允许读取的版本,无法修复源表变化未被刷新。需要恢复正确查询路径与配置,同时保留任务链、分区范围和资源影响,不能只按延迟改善结案。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 记录补丁版本、视图定义、业务截止点和允许延迟,区分调度周期与实际完成周期。
  • 保存整体视图状态及对应 task_runs、实际分区和错误,解释失败或未保留的任务范围。
  • 关联原 SQL 的扫描计划、基线独立性和维表修订样本,核对分组而非仅总额。
  • 交接缓存冷热、刷新资源成本、原配置与旧读路径,明确停止推广和后续复查范围。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。