高斯数据库 (gaussDB) - 表设计最佳实践 (3)

选择分布列

Hash 分布表的分布列选取至关重要,需要满足以下原则:
1. 列值应比较离散,以便数据能够均匀分布到各个 DN。例如,考虑选择表的主键为
分布列,如在人员信息表中选择身份证号码为分布列。
2. 在满足第一条原则的情况下尽量不要选取存在常量 filter 的列。例如,表 dwcjk 相关
的部分查询中出现 dwcjk 的列 zqdh 存在常量的约束 (例如 zqdh=’000001’),那么就
应当尽量不用 zqdh 做分布列。
3. 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便 Join 任务能
够下推到 DN 中执行,且减少 DN 之间的通信数据量。
对于 Hash 分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分 DN 的
I/O 短板,从而影响整体查询性能。因此在采用 Hash 分表策略之后需对表的数据进行数
据倾斜性检查,以确保数据在各个 DN 上是均匀分布的。可以使用以下 SQL 检查数据倾
斜性

select

xc_node_id, count(1)
from  tablename
group by xc_node_id
order by xc_node_id desc;

其中 xc_node_id 对应 DN,一般来说, 不同 DN 的数据量相差 5% 以上即可视为倾斜,如
果相差 10% 以上就必须要调整分布列。
GaussDB 200 支持多分布列特性,可以更好地满足数据分布的均匀性要求。

  
    展开阅读全文