2 个回答
整体的思路如下:
1、检查数据量的分布
1、检查数据量的分布
-- 查看BE节点数据量分布 (MB)
SHOW PROC'/backends'\G
-- 各BE的`DataUsedCapacity`差异超过30%即为倾斜
-- 查看表分桶数据分布
ADMIN SHOW REPLICA DISTRIBUTION FROM 数据库名.表名;
-- 若某个分桶的`ReplicaCount`显著高于其他分桶,则存在分桶倾斜
Show tablet from table\G
2、通过系统表information_schema 或内置命令查看数据分布:-- 查看每个 Tablet 的数据量和行数
SELECT
tablet_id,
data_size,
row_count,
partition_id,
backend_id
FROM
information_schema.tablet_meta
WHERE
table_name ='your_table'
ORDER BY
data_size DESC;
-- 查看表分桶大小分布
SELECT
partition_id,
bucket_num,
count(1) tablet_count,
sum(data_size)/1024/1024 as total_mb
FROM
information_schema.tablet_meta
WHERE
table_name ='表名'
GROUP BY
partition_id, bucket_num
ORDER BY
total_mb DESC;
-- 输出说明:
-- 若某个bucket_num的total_mb是平均值的3倍以上 → 分桶键设计问题
-- 若某partition_id下所有bucket都偏大 → 分区键设计问题
发布于:3周前 (04-07) IP属地:
3、使用tabelt分析工具
https://starrocks-public.oss-cn-zhangjiakou.aliyuncs.com/tools.tar.gz下载完成后编辑config.ini信息,然后执行
4、使用explain执行计划分析,关注点主要有:
https://starrocks-public.oss-cn-zhangjiakou.aliyuncs.com/tools.tar.gz下载完成后编辑config.ini信息,然后执行
./healthy_report config.ini
会列出标准差那列,如果异常高,则表示该表需要重新选取hash键,建表不合理有严重的数据倾斜问题。除此还可以关注下tablet数据平均值是否合理,首先预估每个分区的数据量,然后按照每 1GB -10 GB 原始数据一个 tablet 计算,从而确定分桶数量。4、使用explain执行计划分析,关注点主要有:
SCAN 阶段:是否命中分区/分桶裁剪?数据扫描量是否过大?
JOIN 阶段:是否触发 Colocate/Bucket Shuffle Join?是否存在数据倾斜?
AGGREGATE 阶段:是否过度聚合?是否启用两阶段优化?
发布于:3周前 (04-07) IP属地:
我来回答
您需要 登录 后回答此问题!