【GaussDB for DWS】如何调整表的分布列

举报
Ivan_2020 发表于 2020/06/19 10:18:29 2020/06/19
【摘要】 在数据仓库类型的数据库中,大表的分布列选择对于数据库和语句查询性能都有至关重要的影响。 如果表的分布列选择不当,在数据导入后有可能出现数据分布倾斜,进而导致某些磁盘的使用明显高于其他磁盘,极端情况下会导致集群 只读。 对于Hash分表策略,存在数据倾斜情况下,查询时出现部分DN的I/O短板,从而影响整体查询性能。 在对已经创建的表,该如何进行分布列的调整,也是我们经常思考的课题。

       采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。

       针对分布不均匀的表,尽可能通过调整分布列,以减少数据倾斜,避免带来潜在的数据库性能问题。


选择合适的分布列

       Hash分布表的分布列选取至关重要,需要满足以下基本原则:

  • 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列;

  • 在满足第一条原则的情况下尽量不要选取存在常量filter的列;

  • 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量;

  • 支持多分布列特性,可以更好地满足数据分布的均匀性要求。

调整分布列实施步骤

1. 连接数据库

      通过datastudio 或者linux下使用gsql访问数据库。

2. 创建新表

CREATE TABLE IF NOT EXISTS table1_new ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) DISTRIBUTE BY 
HASH (column1, column2);

3.迁移数据到新表

START TRANSACTION;LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE;INSERT INTO table1_new SELECT * FROM table1;COMMIT;

4. 删除原表

DROP TABLE table1;

5. 替换原表

```
ALTER TABLE table1_new RENAME TO table1;

```

注:标红的${dbname}为待变更表所在的数据库名,table1为原表名,table1_new为新表名,column1和column2为分布列名称。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。