南大通用GBase 8a(gbase database)是列存数据库,数据按分布键散列在各节点。查看数据是否分布均匀,可以用这条SQL:
SELECT gccli.hostname AS 节点, COUNT(*) AS 数据行数, ROUND(COUNT(*) / SUM(COUNT(*)) OVER() * 100, 2) AS 占比百分比 FROM 表名 GROUP BY gccli.hostname;
使用场景:
- 判断分布键选择是否合理(分布均匀度低于80%说明键选得不好)
- 排查数据倾斜问题导致的查询性能瓶颈
原理:gccli.hostname是GBase的伪列,可以标识数据行所在的实际节点。通过它即可快速得到每台机器上的数据分布情况,无需登录各节点查询。
这个小技巧在排查性能问题时非常实用,数据一旦分布不均,大表JOIN或聚合操作效率会骤降。