【GaussDB(DWS)实践系列】数据倾斜检查与修改方法

举报
梅菜扣肉 发表于 2021/03/05 10:40:55 2021/03/05
【摘要】 【GaussDB(DWS)实践系列】数据倾斜检查与修改方法     数据倾斜排查 数据倾斜可通过PGXC_GET_TABLE_SKEWNESS系统表检查:SELECT * FROM PGXC_GET_TABLE_SKEWNESS ORDER BY SKEWRATIO DESC; 参考:倾斜率skewratio * DN 数 >0.1 可以判定为倾斜,大小超过5G的表需要处理。实际表数量较多,...
【GaussDB(DWS)实践系列】数据倾斜检查与修改方法


     数据倾斜排查

 

数据倾斜可通过PGXC_GET_TABLE_SKEWNESS系统表检查

SELECT * FROM PGXC_GET_TABLE_SKEWNESS ORDER BY SKEWRATIO DESC;

 

参考:倾斜率skewratio * DN  >0.1 可以判定为倾斜,大小超过5G的表需要处理。实际表数量较多,可参考skewratio> 0.1且大小超过1G,按照倾斜率倒序排列后再处理。

                image.png

PGXC_GET_TABLE_SKEWNESS视图字段信息如下:

名称

类型

描述

schemaname

name

表所在的模式名。

tablename

name

表名。

totalsize

numeric

表的总大小,单位Byte。

avgsize

numeric(1000,0)

表大小平均值(totalsize/DN个数,该值为平均分布的理想情况下,表在各DN占用空间大小)。

maxratio

numeric(4,3)

单DN表大小最大值占比(表在各DN占用空间的最大值/totalsize)。

minratio

numeric(4,3)

单DN表大小最小值占比(表在各DN占用空间的最小值/totalsize)。

skewsize

bigint

表分布倾斜值(单DN表大小最大值 - 单DN表大小最小值)。

skewratio

numeric(4,3)

表分布倾斜率(skewsize/totalsize)。

skewstddev

numeric(1000,0)

表分布标准方差(在表大小一定的情况下,该值越大表明表的整体分布情况越倾斜)。

  • hash列选取

遵循:数据重复度低(如主键)、常用于group join的字段,不会被update的字段(分布列不支持update)。

  • 数据倾斜解决范例(更换hash 列)

                修改范例

                t1 表比如已经创建 需要修改分布列。

                t1 表表结构

                CREATE TABLE t1

                (

                    c1  int,

                    c2  int

                )DISTRIBUTE BY HASH(c1);

                

                1. 创建新表,分布列使用c2

                

                CREATE TABLE t1_new

                (

                    c1  int,

                    c2  int

                )DISTRIBUTE BY HASH(c2);

                

                上面可以参考这样写,会更简单

                create table t1_new distribute by hash(c2) (like t1 including indexes);

                

                2. 对原表进行 rename,防止数据继续修改。

                

                alter table t1 rename to t1_old;

                

                3. 数据放入新表中

                insert  into  t1_new select * from t1_old;

                

                4. 将新表名称修改为实际表名 

                

                alter table t1_new rename to t1;

                

                5. 没问题后删除备份表

                drop table t1_old;

                

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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

举报
请填写举报理由
0/200