本文最后更新于 2026-08-11T00:39:51+08:00
StarRocks 是从 Doris 分叉出的 MPP 分析引擎,在”高并发点查、实时更新、物化视图、存算分离”上走得更远。本文覆盖底层原理、集群部署(FE/BE)、存算分离形态、参数优化与常见问题。与《Doris 原理、部署与调优指南》对照阅读,差异点会标出来。
底层原理速览
FE / BE 架构 :与 Doris 同源(FE 元数据与查询规划,BE 存储与执行),但查询优化器是独立的 CBO(Cost-Based Optimizer,基于代价),统计信息驱动 Join 顺序选择
四种表模型 :明细(Duplicate)、聚合(Aggregate)、更新(Unique/主键表)、主键(Primary Key)——主键表支持真正的行级实时更新(Delete+Insert)
Pipeline 执行引擎 :算子流水线化,消除执行引擎线程调度开销,多核利用率更高
同步/异步物化视图 :单表同步 MV 自动透明改写;异步 MV 支持多表 Join/聚合,定时刷新
存算分离(Share-Nothing → Share-Data) :数据放对象存储,BE 只做缓存与计算,集群可独立弹性伸缩
Short Key Index / ZoneMap :建表时可选前 3 列做稀疏索引;每列统计信息在扫描时裁剪数据块
StarRocks 与 Doris 的关系:同源于百度 Doris,StarRocks 侧重性能与实时更新 (主键表、CBO、Pipeline),Doris 侧重生态与易用性 (Routine Load、物化视图、文档生态)。选型看场景:超高并发点查与实时更新选 StarRocks,求稳与生态全选 Doris。
部署 1. 规划
节点
角色
数量
规格参考(生产)
FE
Leader + Follower(可加 Observer)
1+2
16C64G,SSD 元数据
BE
存储与计算
3+
32C256G
端口:FE 8030(Web)/ 9030(MySQL);BE 9060(BE 通信)/ 9050(心跳)
priority_networks 必须显式指定;FE 与 BE 时钟同步(ntp);sysctl vm.max_map_count=262144 且 sysctl -w vm.swappiness=0
2. FE 部署 1 2 3 wget https://releases.starrocks.io/starrocks/StarRocks-3.2.x-x86_64.tar.gz tar -zxvf StarRocks-*.tar.gz -C /opt && ln -s /opt/StarRocks-* /opt/starrocksmkdir -p /data/starrocks/meta && chown -R starrocks:starrocks /opt/starrocks /data/starrocks
1 2 3 4 meta_dir = /data/starrocks/meta priority_networks = 10.0.0.0/24 JAVA_OPTS="-Xmx16g -Xms16g -Xmn4g"
1 2 3 4 5 6 7 8 fe/bin/start_fe.sh --daemon mysql -h127.0.0.1 -P9030 -uroot mysql> ALTER SYSTEM ADD FOLLOWER "node2:9010" ; mysql> ALTER SYSTEM ADD FOLLOWER "node3:9010" ;
3. BE 部署 1 2 3 storage_root_path = /data/starrocks/data1,medium:ssd;/data/starrocks/data2,medium:hdd priority_networks = 10.0.0.0/24
1 2 3 4 5 be/bin/start_be.sh --daemon mysql> ALTER SYSTEM ADD BACKEND "node1:9050" ; mysql> ALTER SYSTEM ADD BACKEND "node2:9050" ; mysql> ALTER SYSTEM ADD BACKEND "node3:9050" ; mysql> SHOW BACKENDS; -- 全部 Alive 即就绪
4. 建表验证(主键表 + 物化视图) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE orders ( order_id BIGINT , user_id BIGINT , status VARCHAR (16 ), amount DECIMAL (20 ,2 ), modify_ts DATETIME )PRIMARY KEY (order_id) DISTRIBUTED BY HASH(order_id) BUCKETS 24 ;CREATE MATERIALIZED VIEW mv_user_daily REFRESH ASYNC START ('00:00' ) EVERY (INTERVAL 1 DAY )AS SELECT user_id, DATE (create_time) d, SUM (amount) total FROM orders GROUP BY user_id, DATE (create_time);
5. 存算分离形态(Share-Data,可选) 1 2 3 4 5 6 7 8 9 10 11 enable_cloud_snapshot = true CREATE STORAGE VOLUME s3vol TYPE S3 LOCATIONS ("s3://bucket/prefix" ) PROPERTIES ("aws.s3.endpoint" ="..." , "aws.s3.access_key" ="..." , "aws.s3.secret_key" ="..." ); CREATE TABLE t (...) DISTRIBUTED BY HASH(k) BUCKETS 16 PROPERTIES ("storage_volume" ="s3vol" );
存算分离适合”弹性伸缩、多集群共享一份数据”的场景,但点查延迟依赖本地缓存命中率(热数据命中才快)。评估不了缓存命中率前,不建议把核心在线场景直接迁到 Share-Data。
调优 1. 查询优化器
SET enable_cbo=true(默认开启);关键表执行 ANALYZE TABLE xxx 收集统计信息,CBO 才有依据
大宽表关掉无关列的统计;Join 用小表驱动(SET join_implementation_mode="auto")
Pipeline:SET pipeline_dop=0(按机器核数自适应),高并发场景可显式设 4-8,避免线程数爆炸
2. 内存
参数
建议
说明
BE mem_limit
60%-70% 物理内存
单 BE 上限
会话 query_mem_limit
大查询单独给
防止 OOM,配合 EXPLAIN 看预算
query_max_memory_limit_percent
90
单查询占 BE 内存上限
3. 主键表与实时更新
主键表写入是”内存主键索引 + 写入时与旧数据合并”,高频小批次更新 最合适(如 1 分钟级增量)
批量导入用 INSERT INTO ... VALUES 分批,或 Broker Load;更新量大时增大分桶数(主键索引内存占用也增大)
主键表不适用全表重写型大任务(如每天全量重灌),此时考虑明细表或异步物化视图
4. 物化视图
同步 MV:只服务单表聚合,命中即透明改写,适合高频点查计数
异步 MV:刷新策略 REFRESH ASYNC START('00:00') EVERY(INTERVAL 1 DAY),任务多时调大 mv_task_run_num(默认 4)
查询是否能命中 MV:EXPLAIN SELECT ... 看是否出现 MV_ 前缀节点
5. Colocate Join 与缓存
Colocate Join :多表同分桶键 + colocate_with="g1",Join 时数据本地化,免 shuffle,高并发 Join 收益最大
BE 块缓存 storage_page_cache_limit(默认 20% 内存);热数据表可用 CREATE TABLE ... PROPERTIES ("enable_persistent_index"="true") 提升点查
常见问题
现象
原因
处理
点查延迟高
未命中块缓存/主键索引未加载
查 SHOW BE 缓存命中率,调 storage_page_cache
主键表导入慢
主键索引内存不足换磁盘
调大 BE mem_limit 或减少桶数
物化视图不刷新
mv_task 并发/超时
SHOW MATERIALIZED VIEWS 看 State,调 mv_task_run_num
存算分离查询慢
缓存冷
预热热表、调大磁盘缓存 datacache.*
磁盘水位不均
新 BE 数据未均衡
等待或 ALTER SYSTEM ... 检查 SHOW BACKENDS
总结
StarRocks = 同源 Doris 的”性能特化”分支:CBO + Pipeline + 主键表 + 同步/异步物化视图
部署与 Doris 同构(FE 集群 + BE 集群),新增存算分离形态(对象存储 + CN)
调优主线:统计信息与 CBO → Pipeline 并行度 → 主键表写入模式 → 物化视图 → Colocate Join
选型结论:高并发点查、实时更新场景优先 StarRocks;Doris/StarRocks 两者是湖仓时代 OLAP 的左右手,底座迭代时二选一即可,不建议同时养两套