注意:StarRocks 3.5.x 滚动升级触发 MV 全量刷新问题
StarRocks 3.5.x数据库集群在滚动升级过程中,因异步MV reload机制与MVActiveChecker线程的交互,触发了物化视图的全量刷新问题。当FE节点重启时,MaterializedView.onReload()方法先将所有MV设为inactive状态,随后异步检查基表可用性,这制造了数分钟的窗口期。在此期间,MVActiveChecker每60秒扫描一次,自动激活inactive的MV,激活路径中调用refreshMaterializedView时使用了force=true参数,导致全量刷新所有历史分区。在K8s集群滚动更新期间,随着FE Leader的多次切换,这一过程反复发生,造成CN节点CPU打满和数据同步延迟数小时。问题根源是3.5分支未及时backport force=false的修复(PR #57371),以及3.5.15引入的异步reload特性。社区在PR #76576中修复了此问题,并回溯到3.5.21版本。规避方法包括升级到3.5.21,或在升级前后临时禁用enable_mv_automatic_active_check配置,以关闭自动激活功能,待集群稳定后再启用。本文通过详细的时间线分析、日志证据和代码定位,深入剖析了故障触发链路,为数据库管理员提供了实用的排查思路和解决方案。