跳到主要内容

表创建

数据模型

数据模型特点适用场景
明细模型用于保存和分析原始明细数据,以追加写为主要写入方式,数据写入后几乎无更新日志,操作记录,设备状态采样,时序类数据等
聚合模型用于保存和分析汇总类(如:Max、Min、Sum、以及 Replace)数据,不需要查询明细数据。数据导入后实时完成聚合,数据写入后几乎无更新按时间、地域、机构汇总数据等
更新模型支持基于主键的更新,Merge-On-Read,用于保存和分析需要更新的数据状态会发生变动的订单,设备状态等
主键模型支持基于主键的更新,Delete-And-Insert,大批量导入时保证高性能查询。用于保存和分析需要更新的数据状态会发生变动的订单,设备状态等

数据模型建表

image-20250513193742985

排序键

在 StarRocks 中数据导入至数据模型,按照建表时指定的一列或多列排序和存储,这部分用于排序的列就称为排序键

最佳实践

  • 将经常过滤的列作为 Sort Key
  • 将经常 Group By 的列作为 Sort Key
  • 数字列尽量放到 String 列之前
  • 在建表语句中,排序键必须定义在其他列之前
  • 排序列的顺序必须与表定义的列顺序一致
  • 优先选择整型作为排序键
  • 数据类型为 BITMAP、HLL 的列不支持作为排序键

![image-20250513193936659](../../../static/images/starrocks_sortkey_tablecreation .png)

排序键(Sort key)与 前缀索引(Prefix key)

Prefix key 索引粒度1024行

Prefix key 索引Key:36字节

使用说明:

• 前缀索引列的数量不能超过3个。

• 前缀索引项的长度不能超过36 字节。

• 前缀索引中不能包含float 或double 类型的列。

• 前缀索引遇到varchar 类型的列会被截断,建议将varchar 列放在key 列中的在末尾位置。

image-20250513194156768

分区&分桶

image-20250513194408971

分区

image-20250513194454995

分桶

image-20250513194617597

Colocate join

image-20250513194646882

索引

Bitmap Index

image-20250513194753521

Bloom Filter Index

image-20250513194835091

物化视图

物化视图:提取某些维度、指标建立对用户透明的预聚合表

单表同步物化视图

image-20250513235815620

使用

image-20250513235852255

多表异步物化视图

image-20250513235928981

使用

image-20250513235954406

image-20250514000008920

对比

image-20250514000038533

多表关联

• Join Condition 的列,使用整型、DATE 类型,关联字段类型保持一致

• 在Join 之前,对表添加where 条件,充分发挥谓词下推

• 大表Join 使用Colocate join

• 通过Hint 方式调整表关联方式

• 多表物化视图

• 避免数据倾斜

image-20250514000139582

并行度设置

image-20250514000208767

image-20250514000222577

高并发优化

image-20250514000247819

慢查询分析

image-20250514000315196

Group By 优化

image-20250514000358166

常见问题

单个查询的内存超限

报错信息:"Mem usage has exceed the limit of single query, You can change the limit by set session variable exec_mem_limit."

解决方案:需要修改session 变量: exec_mem_limit

查询总内存超限

报错信息:"Mem usage has exceed the limit of query pool"

解决方案:需要优化SQL

BE 总内存超限

报错信息:"Mem usage has exceed the limit of BE"

解决方案

需要分析下具体哪些进程内存占用比较多,

通过以下命令查看内存占用明细:

curl -XGET -s http://BE_IP:BE_HTTP_PORT/metrics | grep

"^starrocks_be_.*_mem_bytes|^starrocks_be_tcmalloc_bytes_in_use"

参考 https://www.bilibili.com/video/BV1E84y1g7A7