【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,按照倾斜率倒序排列后再处理。
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;
- 点赞
- 收藏
- 关注作者
评论(0)