GaussDB(DWS) 之 DDL设计的几点建议

举报
MrD 发表于 2021/10/15 18:21:04 2021/10/15
【摘要】 本文章主要介绍 GaussDB(DWS) 中DDL设计时的几点建议及其基本原理。


DDL的设计会影响数据变更和查询性能,在对时效有严格要求的业务中,数据结构尤为重要。设计时建议事项如下:

1.分布键的数量建议不大于4

在集群版GaussDB(DWS)中,一般分布键较多时数据分布会比较均匀;即在单分布键下数据分布节点计算时的影响因素较少,一旦该分布键值存在聚集,数据在节点上的表现也会出现倾斜现象,而多分布键会增加分布节点计算的影响因素,减小数据倾斜。但分布键过多会出现存储性能和联合查询性能问题,建议不大于4个分布键。

a)存储性能问题:

在数据新增时,需要按hash函数计算每一分布列的结果,再将结果整合起来,作为确定分布节点参数,分布键越多,计算越复杂越耗时。

b)联合查询性能问题:

多表联合查询时,当分布键所有列为join条件涉及列的子集时,在执行计划中数据不需要做重新分布;反之,需要按join条件进行数据的重分布,分布键列指定的越多,其成为join条件涉及列的子集概率越小,越容易发生数据的重分布,而数据重分布则会消耗资源和时间。

2.索引列数/PCK列数建议不大于4

a)索引列数越多,其维护索引数据需要的资源越多,出现重复索引概率越大。

b)PCK列越多,因在列存数据导入时需要对每一PCK列进行比较计算来划分CU,其过程将消耗越多时间和资源,导入性能降低;而且在数据查询时,查询条件所涉及列的前缀需要是PCK列(如PCK列为abc,则查询条件需要为a>? and b>? and c>?类似样式的组合),这样才能在CU过滤时达到很好的效果,反之则需要遍历每一个CU,数据的聚簇没有发挥优势。

3.防止创建无效PCK

GaussDB(DWS)8.1.1版本中,CU的过滤比较支持charint8int2int4textbpcharvarchardatetimetimestamptimestamptz数据类型。所以PCK列指定了非上述类型的列时,在实际CU过滤时并没有起到作用,称之为无效PCK列,而维护这个无效PCK列需要一定资源。

4.Numeric的使用规范

在涉及数值类型使用时,尽量使用整型,或对精度要求不高的情况下,使用float类型这类定长类型,比numeric这种变长类型计算性能好;即使用numeric类型,建议指明标度和精度,尽量在38位以内,因为在涉及numeric类型数值的计算时,底层会尝试将计算转换为intbigint之间的计算,以提升计算效率,即数据类型的大整数优化。在GaussDB(DWS)8.1.1版本指出未指定精度的情况下,小数点前最大131,072 位,小数点后最大 16,383位,即按最大标度和精度处理,在计算时将无法进行大整数优化,计算效率相应下降。

5.索引列宽度建议在64字节内

过长字段一般都是字符串,这些字段基本不会执行比较操作,而且宽字段会造成索引体积过大。

6.复制表的数据量大小建议在100MB

集群版的GaussDB(DWS)支持复制表(replication)类型,该表会在每一个节点中维护一份全量数据,其较多应用于可枚举类数据的存储。如果表数据量过大,会占用较多空间;并且在实际联合查询中,节点会遍历所有表数据,可能会比将表类型改为分布表后的联合查询消耗时间还长(分布表虽然可能会产生数据重分布,但每个节点遍历的数据量会减少)。

7.分布列指定规范性

GaussDB(DWS)集群中,分布列建议不要指定为booleandate类型字段,很容易出现数据的倾斜。

8.序列新增时cache个数指定值建议大于100

在表字段使用到sequence时,其next_value首先从本节点预先获取缓存下来的值中拿取,如果用完了则请求GTM服务再次获取,在大批量数据新增时,如果cache数量过少,会不断请求GTM,多个节点大批量请求会导致GTM压力过大,容易造成崩溃或阻塞,所以建议新建sequence时指定cache值大于100


当然在实际DDL设计中还有很多需要注意的内容,后续博文将会逐一补充到位,同时也会针对每一项进行图文或示例解析。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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