合 GreenPlum性能调优之数据倾斜
数据分布
greenplum中数据分布情况直接影响到查询的效率,原因是greenplum架构是由性能最差的segment实例决定,所以数据分布不均匀会影响整个集群的性能。
检查数据的偏斜/倾斜情况:
查询比较慢:
1 2 3 4 5 | -- 查看skccoeff偏差系数 SELECT * FROM gp_toolkit.gp_skew_coefficients WHERE skcrelname = 'table_name'; -- 查看空闲偏差系数:越小越好 SELECT * FROM gp_toolkit.gp_skew_idle_fractions WHERE sifrelname = 'table_name'; |
查看数据分布情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | -- 用count(*)方式计算每个segment上的记录数,慢,不建议 select gp_segment_id, count(*) from table_name group by 1 order by 1; -- 计算一张表在不同segment上所占空间来评估是否发生数据倾斜,推荐 select gp_segment_id, pg_size_pretty(pg_relation_size('table_name')) from gp_dist_random('gp_id') order by 1; -- 真实大小 select pg_size_pretty(sum(tbsize)) from ( select gp_segment_id, (pg_relation_size('table_name')) tbsize from gp_dist_random('gp_id') order by 1) a; 在命令运行: gpskew -t public.ate -a postgres |
如数据分布不均匀,将发挥不了并行计算的优势,严重影响性能。