Greenplum 扩容一

2022-04-08 00:00:00 数据 操作 节点 扩容 分布

扩容过程简述

数据库在使用的过程中会随着数据量的增加而需要扩容,一般需要扩容的原因如下:

  • 历史数据量增加,磁盘空间不足

  • 计算的数据量增加,计算性能跟不上(CPU或磁盘IO吞吐限制)

  • 网络传输量增加,网卡限制

通过Greenplum自带的expand工具,我们既可以实现横向扩展,也可以实现纵向扩展。

整体流程

整体流程图

扩容过程


扩容完成

新来的请求,由全部节点统一处理。但是执行计划利用不上旧的分布键,会导致数据移动的操作特别多,且数据会存在倾斜,新加节点的计算能力并不能很好的用上。
当表重新分布正在进行中时,任何新创建的表会按照普通操作那样被分布在所有的segment上。查询也能访问所有的segment,即使相关的数据还没有被完全分布在新segment上的表中也行。
正在被重新分布的表或者分区会被锁定(加ACCESS_EXCLUSIVE_LOCK锁)并且对于读或者写操作不可用。当其重新分布完成后,常规操作才会继续。
重分布过程中会消耗大量的网络和磁盘资源,必须选在业务低峰期进行。

扩容注意事项

  • 在扩容过程中,不允许运行gpconfig和gppkg。目的是防止一些配置或者文件只应用到原有节点而没有应用到新节点,造成节点间文件或者配置的不一致。

  • 在重分布期间,gpcheckcat和gpaddpkg不允许运行。因为gpcheckcat的目的是在集群范围内检测可能的catalog问题,并提示修复。在扩容期间,并没有必要执行这样的操作。可以在扩容全部完成后执行。

  • 数据重分布期间,不要修改表名,不要更改表的分布策略,不要修改表的schema。如下图所示,在进行重分布中,将表名进行更改,发现,控制扩容进程的元数据表并没有同步将表名更新,将出现修改表名后的表无法自动完成重分布的问题。

扩容存在的问题

  • 需要停机,集群无法在扩容期间提供服务。

  • 数据重分布过程集群性能差。扩容后,所有业务表的分布键均变成随机分布,而随机分布表因为不能确定数据分布规律,无法对查询做优化。

  • 对大量小表做并行重分布的时候会因为状态表更新的串行化产生瓶颈虽然表的重分布可以并行进行,但是扩容过程中因为额外记录了每个表的更新状态,在对表做完重分布后要更新状态表。Greenplum 6版本之前表的更新操作只能串行。

  • 来源 https://www.modb.pro/db/51345

相关文章