概述
查看StarRocks版本
select current_version();
查看状态
MySQL> SHOW PROC "/brokers"G
mysql> SHOW PROC '/backends'G
mysql> SHOW PROC '/frontends'G
StarRocks的1副本意思是仅有一份数据,三副本为共有三份数据
创建表
前缀索引,where条件的放在表的前三列(前两列date/int,string放在第三列),其他需要作为查询条件的字段,通过物化视图实现(未使用到聚合查询,通过创建索引来实现)。
分区和桶设置
分区是针对表的,是对表的数据取段。分桶是针对每个分区的,会将分区后的每段数据打散为逻辑分片Tablet。副本数是针对Tablet的,是指Tablet保存的份数。那么我们不难发现,对某一个数据表,若每个分区的分桶数一致,其总Tablet数:
- 总Tablet数=分区数*分桶数*副本数
show tablet from 表名;
- 分区:90天一个分区 (每个分区数据23.7G)
修改表所有分区的副本数
ALTER TABLE 数据库.表 MODIFY PARTITION(*) SET ("replication_num" = "3");
修改表的默认副本数量,新建分区副本数量默认使用此值:
ALTER TABLE 数据库.表 SET ("default.replication_num" = "2");
- 桶:3*24/2=36桶(每个桶数据675M)分桶:为了保证数据不倾斜,我们会根据业务选择一列或者多列进行分桶
查看服务器cpu数、核数,确认桶数量
分桶键选择:分桶的目的我们一直在说是为了将数据打散,所以分桶键就需要选择高基数的列(去重后数据量最大的列)。分桶后的数据如果出现严重的数据倾斜,就可能导致系统局部的性能瓶颈,所以我们也可以视情况使用两个或三个列作为分桶键,尽量的将数据均匀分布
分桶数:分桶数的设置需要适中,如果分桶过少,查询时查询并行度上不来(CPU多核优势体现不出来)。而如果分桶过多,会导致元数据压力比较大,数据导入导出时也会受到一些影响。
这里需要注意的是,已创建分区的分桶数不能修改(有其他方式能实现,但比较麻烦),所以前期设定合适的分桶数非常重要。
在机器比较少的情况下,如果想充分利用机器资源可以考虑使用 BE数量 * cpu core / 2来设置bucket数量
# 总核心数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查询物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的核数(即个数) cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l # 查看总线程数量 grep 'processor' /proc/cpuinfo | sort -u | wc -l
导入数据
- 全量导入
修改导入脚本的字段顺序
- 增量导入
修改导入脚本的字段顺序
- 定时导入
创建物化视图(聚合类场景适合物化视图,物化视图主要用于明细模型的预聚合)新违法只是过滤查询
- 创建物化视图
CREATE MATERIALIZED VIEW 物化视图名 AS (SQL语句);
- 查看Base表table11的物化视图表信息,语句为:
desc table11 all;
- 删除创建完成的物化视图
DROP MATERIALIZED VIEW IF EXISTS 数据库.物化视图名;
- 删除创建中的物化视图
CANCEL ALTER MATERIALIZED VIEW FROM 数据库.物化视图名;
- 查看状态
SHOW ALTER MATERIALIZED VIEW FROM 数据库;
- 查看数据库下所有的物化视图(这里可以用IN或FROM)
SHOW MATERIALIZED VIEW IN 数据库;
- 解析查询语句是否命中物化视图
EXPLAIN sql语句;
查看是否包含以下内容:
PREAGGREGATION:ON
rollup:物化视图名
创建一下bitmap或者bloomfilter索引
- BloomFilter索引
-- 创建索引
ALTER TABLE 表名 SET ("bloom_filter_columns" = "字段1,字段2,字段3,字段4,字段5,字段6 ");
-- 查看索引创建状态
SHOW ALTER TABLE COLUMN WHERE TableName = "表名";
-- 查看索引
SHOW CREATE TABLE 表名;
-- 删除索引
ALTER TABLE 表名 SET ("bloom_filter_columns" = "");
-- 修改索引
ALTER TABLE 表名 SET ("bloom_filter_columns" = "字段,字段");
- Bitmap
-- 创建索引(取值为枚举型,取值大量重复,较低基数,并且用作等值条件查询或者可转化为等值条件查询的列上创建)
CREATE INDEX 索引名称 ON 表名 (字段) USING BITMAP COMMENT '注释';
-- 查看索引创建状态
SHOW ALTER TABLE COLUMN WHERE TableName = "表名";
-- 查看索引
SHOW INDEX FROM 表名;
-- 删除索引
DROP INDEX 索引名 ON 表名;
修改并行度设置成CPU核数量的一半 。
mysql> set global parallel_fragment_exec_instance_num=16
冷热策略和存储介质(待研究)
支持在一个集群内使用多种存储介质(HDD/SSD)。我们就可以为分区设置不同的存储介质
将最新数据所在的分区放在SSD上,利用SSD的随机读写性能来提高查询性能。而老的数据可以放在HDD中,以节省数据存储的成本。
最后
以上就是难过红酒为你收集整理的StarRocks建表优化全流程的全部内容,希望文章能够帮你解决StarRocks建表优化全流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复