单张表,3千万的数据,表按月分区,查询一个月的数据需要20s以上,目前只有3台机器,fe 和 be共用,3台都是16核64g内存,请问下有什么优化的方式么?
增加机器,优化sql
方便的话贴下DDL,还有查询语句,隐私部分可以去掉,这样有利于我们进行分析。
我们这边压测一亿数据范围查询9000多条,不到1秒。也是按月分区,32个桶
16核32G。
create table report_corpus_invoke(
rdate date comment default null ‘日期’,
data_id varchar(30) default null comment ‘语料id’,
user_id varchar(30) default null comment ‘用户id’,
query varchar(500) default null comment ‘查询词’,
click_count int(11) default ‘0’ comment ‘调用次数’,
praise_count int(11) default ‘0’ comment ‘点赞次数’
)
engine=olap
unique KEY(rdate
, data_id
, user_id
, query
)
PARTITION BY RANGE(date
)
(
PARTITION p202001
VALUES LESS THAN (“2020-02-01”),
PARTITION p202002
VALUES LESS THAN (“2020-03-01”),
PARTITION p202003
VALUES LESS THAN (“2020-04-01”),
PARTITION p202004
VALUES LESS THAN (“2020-05-01”),
PARTITION p202005
VALUES LESS THAN (“2020-06-01”),
PARTITION p202006
VALUES LESS THAN (“2020-07-01”)
)
DISTRIBUTED BY HASH(data_id
) BUCKETS 16
PROPERTIES
(
“replication_num” = “3”,
“storage_medium” = “SSD”,
“storage_cooldown_time” = “2021-01-01 12:00:00”
)
report_corpus_invoke 这个表,有个比较大文本的字段query,直接使用select rdate,data_id,user_id,query,click_count,praise_cout from rdate >=‘2020-03-01’ and rdate<=‘2021-03-31’ 的话,很慢,一个月大概接近1千万数据了, 不知道是不是根query这个字段有关系呀?还是跟我的分桶有关?
就是简单的单张表查询咋优化sql
我这张表,用show data查看,有5个g的大小
你用的是 unique key 模型,这个模型性能会差不少(因为需要数据用 replace 方式聚合)。
你导入的频次如何,如果导入快的话,版本数量多,那很大时间就耗在 SCAN 节点的聚合上了(MERGE、Sort),你可以从 profile 里找下 OLAP_SCAN_NODE看下(找下最耗时的节点在哪里)。
并且你 unique key 里的列还是字符串,合并速度就更慢了。