order by非常慢


看到大佬发的这个帖子里说,使用tools查看tablet数据量标准差,如果异常高,需要重新选取hash键
请问正常的标准差范围是多少呢?
我现压测使用的表,没有类似UUID的区别度很高的列,(三亿数据量,区别度最高的列才三千万),又希望压测到300并发。要怎么选取分桶键呢?
谢谢。

单列基数不够的话,可以用多个列去做hash键

多列做hash会不会影响高并发性能呀

profile.txt (39.1 KB)

txt文件是我做一个普通的order by查询压测时的profile,可以麻烦帮忙分析一下么,是不是数据倾斜导致的

hash键主要是打散数据用的,高并发性能,比如点查场景的话主要还是key列的选取。可以看看这个视频的简介内容 https://www.bilibili.com/video/BV1SX4y1c7i4?spm_id_from=333.999.0.0

select * from agg_mis_r_sales_a_achment_lep_prem_index_m order by margin_version_desc limit 10 针对你这个sql来讲order by是比较吃资源的,你这个sql的慢主要还是因为分桶太少,每个桶的数据有5-10G,我们建议是单桶数据量100MB-1GB之间的,也就是你现在的bucket设置数量*20是比较合理的,然后把并行度调大点,可以得到很大的性能提升

感谢,我修改了测试一下,再来回复

profile.txt (16.2 KB)
你好,我换了一个分布比较均匀的表来做order by,依旧很慢。下面是表的tablet大小,每个都不超过100MB。

±-------±---------±------------±-------------±------------------±------------------±------------------±------------------------+
|database|table_name|data_size(MB)|replica_counts|tablet_size_max(MB)|tablet_size_min(MB)|tablet_size_avg(MB)|tablet_standard_deviation|
±-------±---------±------------±-------------±------------------±------------------±------------------±------------------------+
| ssb |lineorder | 14961.15 | 336 | 47.99 | 27.48 | 44.53 | 6.91 |
±-------±---------±------------±-------------±------------------±------------------±------------------±-------------------
-----+

其实通过show tablet或者starrocks-tablet-tool工具来看,昨天的表的tablet也没有5-10G,都是几十M的

你的查询表是agg_mis_r_sales_a_achment_lep_prem_index_m,下面展示的数据量是表lineorder尼?

lineorder分布比较均匀,用这个试一下order by的性能

后面这个sql也就是lineorder这张表数据分布是均匀的,这个sql慢点原因是没有跳转并行度参数,现在并行度是1,可以看下这个视频有关于并行度参数的介绍https://www.bilibili.com/video/BV1SX4y1c7i4?p=2 把该参数调整大点再查查看?