GaussDB(DWS) 集群扩容系列二:离线重分布 vs 在线重分布

数据重分布

上一篇博文中,主要介绍了集群扩容和数据重分布的大体流程,此次,将会更为详细的介绍数据重分布底层原理。

集群扩容之后,为何需要做数据重分布?

原因有两点:

一、集群扩容之后,集群节点数量增加,但集群中老数据仍然分散到集群老节点上。此刻,在新集群上执行SQL业务时,其执行节点仍然散落到集群老节点上,SQL的性能并没有得到提升。执行数据重分布的目的就是将老数据平均的搬迁到集群的所有节点上,减少集群老节点上的数据量,增加集群新节点上的数据量,如此,在新集群上执行SQL业务时,单个DN上操作的数据量会降低,从而提升性能。

二、通常情况下,需要进行集群扩容的局点,都是数据库磁盘空间濒临饱和的,如果不做数据搬迁,添加完节点的新集群,数据量也会分布严重不均匀,老节点上的磁盘极容易达到90%临界值,造成数据库只读。

执行数据重分布的注意事项有哪些?

一、数据重分布操作会占用很长的时间,需要在业务相对空闲时执行,通常会选择一个合适时间窗来完成;

二、不支持数据重分布的回滚,一旦数据重分布开始,系统不能再回滚到扩容前;

三、在重分布执行过程中,用户应当避免执行长时间的查询,否则可能导致重分布出现等待加锁超时失败;

四、数据重分布有两种模式,分为离线重分布与在线重分布;离线重分布理论上禁止业务执行,否则可能出现锁超时,导致重分布失败;在线重分布对正在重分布的数据表,除少量场景有规格限制外,能保证大多数场景业务正常运行;而离线重分布的执行时长通常会比


文章将会详细介绍离线重分布与在线重分布的原理、注意事项、规格等内容。

离线重分布

离线重分布原理如下:

注意事项:

在离线重分布阶段,仅允许用户执行查询操作,由于离线重分布会对重分布表加共享锁,用户插入、更新、删除数据都会被阻塞。由于大表的重分布时间很长,有可能几十分钟或一两个小时,被阻塞的用户作业会等锁超时而中断执行。

规格:

离线重分布阶段,不允许用户插入、更新、删除数据,更不允许做DDL操作,仅允许做数据查询操作。

在线重分布

在线重分布原理如下:

注意事项:

一、在线重分布对业务的影响:

1. 在线重分布由多个事务组成,每个事务的加锁级别不一样,加8级锁的事务时间都很短暂,尽量避免加锁对业务的影响;

2. 在线重分布过程中,对正在重分布的数据表,除少量场景有规格限制外,能保证大多数场景业务正常运行。

二、同时,用户业务对在线重分布也会有一定影响:

1. 用户对重分布的表执行频繁的DDL和DML操作并且时间比较长时,会影响重分布时间,导致重分布作业处于pending中;

2. 用户作业在事务中长时间对表加锁,会长时间阻塞对该表进行重分布,甚至导致该表重分布失败,并反复重试;

3. 用户作业对正在重分布的表有大量的数据更新或删除时,会导致重分布多次追增时间较长,增加重分布时间;

4. 用户作业如果有truncate或truncate partition操作,会中断重分布作业,重分布作业需要重入。

规格:

  • 支持新建table、schema、tablespace、view、游标、存储等;

  • 对于正在重分布的表,支持insert、select、update、delete、merge into、drop、copy、gds、truncate、truncate partition等操作;

  • 对正在重分布的表,不支持绝大部分ALTER TABLE操作,包括修改表名、修改schema、新增或删除字段、删除分区、修改默认值等操作,但ALTER TABLE ... TRUNCATE PARTITION除外;

  • 支持从jdbc、odbc、DS、gsql、LVS等客户端下发作业;

  • 支持审计功能;

  • 对于超过996列的宽表,该表重分布期间,仅支持insert和select操作,不支持delete、update操作;

  • 不支持创建、删除、重命名database;

  • 不支持创建、删除、重命名表空间;

  • 不支持对正在重分布的表执行vacuum full和cluster命令,实际上,表完成重分布后也相当于完成了一次vacuum full操作;

  • data_redis是重分布预留的schema,用户应该避免创建同名的schema, 如果存在会导致重分布失败;

  • CN剔除和DN节点故障期间,集群状态为degraded,不支持在线重分布;

  • 备份恢复期间,不支持与在线重分布同时使用;

  • 增删cn期间,不支持与在线重分布同时使用。


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

(完)