建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

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

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

Ivan_2020

发帖: 71粉丝: 9

发消息 + 关注

发表于2020年06月19日 10:15:17 623 4
直达本楼层的链接
楼主
显示全部楼层
[项目实践] 【GaussDB for DWS】如何调整表的分布列

【摘要】在数据仓库类型的数据库中,大表的分布列选择对于数据库和语句查询性能都有至关重要的影响。 如果表的分布列选择不当,在数据导入后有可能出现数据分布倾斜,进而导致某些磁盘的使用明显高于其他磁盘,极端情况下会导致集群 只读。 对于Hash分表策略,存在数据倾斜情况下,查询时出现部分DN的I/O短板,从而影响整体查询性能。 #如何选择分布列 采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。 Hash分布表的分布列选取至关重要,需要满足以下基本原则: - 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列; - 在满足第一条原则的情况下尽量不要选取存在常量filter的列; - 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量; - 支持多分布列特性,可以更好地满足数据分布的均匀性要求。 #调整分布列实施步骤 ##1. 连接数据库 通过datastudio 或者linux下使用gsql访问数据库。 ##2. 创建新表 ```js CREATE TABLE IF NOT EXISTS table1_new ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) DISTRIBUTE BY HASH (column1, column2); ``` ##3.迁移数据到新表 ```js START TRANSACTION; LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE; INSERT INTO table1_new SELECT * FROM table1; COMMIT; ``` ##4. 删除原表 ```js DROP TABLE table1; ``` ##5. 替换原表 ``` ALTER TABLE table1_new RENAME TO table1; 注:标红的${dbname}为待变更表所在的数据库名,table1为原表名,table1_new为新表名,column1和column2为分布列名称。
举报
分享

分享文章到朋友圈

分享文章到微博
发表于2020年06月19日 10:52:49
直达本楼层的链接
沙发
显示全部楼层

hash分表是怎样的策略?

点赞 评论 引用 举报

Ivan_2020

发帖: 71粉丝: 9

发消息 + 关注

发表于2020年06月19日 11:04:59
直达本楼层的链接
板凳
显示全部楼层

我们的列存表,当前只支持的hash分布,建表语句中通过指定hash分布实现。

DISTRIBUTE BY 
HASH (column1, column2)


点赞 评论 引用 举报

小徐同学

发帖: 12粉丝: 0

发消息 + 关注

发表于2020年06月23日 11:14:49
直达本楼层的链接
地板
显示全部楼层

非常有用,收藏了

点赞 评论 引用 举报
发表于2020年06月23日 15:23:57
直达本楼层的链接
5#
显示全部楼层

看标题以为可以修改分布列了QAQ

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册