云数据库 GaussDB-选择分布列
选择分布列
Hash分布表的分布列选取至关重要,需要满足以下原则:
- 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。
- 在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表dwcjk相关的部分查询中出现dwcjk的列zqdh存在常量的约束(例如zqdh=’000001’),那么就应当尽量不用zqdh做分布列。
- 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。
对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性
12345 |
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 支持多分布列特性,可以更好地满足数据分布的均匀性要求。
Range/List分布表的分布列由用户根据实际需要进行选择。除了需选择合适的分布列,还需要注意分布规则对数据分布的影响。
- 分布式消息队列是什么_分布式消息队列好处_消息队列-华为云
- GaussDB视频教程_gaussdb查看表结构语句_高斯数据库视频教程_华为云
- 云数据库GaussDB(for MySQL)_云数据库_分布式数据库
- GaussDB数据库考试_GaussDB认证_高斯数据库考试_华为云
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- 分布式云原生有哪些优势_为什么选择华为云云原生_分布式云原生
- 分布式消息基本概念_消息队列_分布式系统-华为云
- GaussDB配额_GaussDB数据库配额_高斯数据库配额_华为云
- GaussDB考试_GaussDB数据库考试_高斯数据库考试_华为云
- GaussDB数据库服务_GaussDB选择分布键原则_华为高斯数据库服务