Gbase 8a 重分布具体过程
1. 开始重分布
set global gcluster_rebalancing_concurrent_count=0;
rebalance instance;执行完上述命令后gclusterdb.rebalancing_status生成,所有需要的分布表处于STARTING状态。此时所有表都处于可读可写状态,表无任何锁。

2. 调整同时重分布表个数,正在进行重分布的表将更改为RUNNING状态,处于RUNNING状态的表会加上锁,表只能进行select和insert into。而update和delete操作会被rebalance_lock锁阻塞,无法执行。
set global gcluster_rebalancing_concurrent_count=1;


3. 此时查看gc的show processlist 可以观察到表处于rebalance状态。

4. 查看gn的show processlist,可以观察看表会有一下几个状态
(1)先统计表有多少行

(2)建立中间表,中间表数据文件以为8a_rebalancing开头,再gn节点数据文件目录可看到,可du -sh该目录确保文件大小一直增加,来确认迁移在正常进行。


(3)将重分布表的内容分批迁移到中间表上,每个批次迁移的行数量由gcluster_rebalancing_step参数控制。

(4)完成迁移后,同步中间的scn号,如果迁移过程中有insert 数据至重分布表中,则继续迁移insert数据至中间表,此时gclusterdb.rebalancing_status表中的percentage为90%,此过程中重分布表不仅不可update和delete,而且变为不可insert。

(5)删除重分布表,并重命名中间表,完成重分布。
5. 在重分布过程中可以暂停正在重分布的表,重分布表状态由RUNNING变更为PAUSED。(对于随机表快速重分布的表无法PAUSED,或者说PAUSED需要时间很长,不建议操作)
pause rebalance table test.emp;
gc的processlit中可观察到重分布表的状态由Move data to inter table 更改为rebalance paused。

paused状态更改的时间跟gn 上的分批迁移数据的sql执行时间相关,即gcluster_rebalancing_step控制的行数据迁移完成,才能暂停迁移任务

此时表上独占锁仍存在,无法进行update和delete操作。

6. 处于PAUSED状态中的表,可以变更为CANCEL,以此来释放表上的独占锁。
cancel rebalance table testdb.emp;
此操作的时间跟删除已生成中间表的数据文件相关,即上文中的8a_rebalancing_13483_n1和8a_rebalancing_13483_n2

此时表上的独占锁已释放,可以进行正常的delete和update操作

7. 对于处于PAUSED状态中的表,可以执行continue继续未完成重分布,而对于已经CANCEL无法执行进行continue继续重分布,需要进行rebalance instance;来让其重新重分布。
continue rebalance table testdb.emp;8. 总结和建议
重分布过程中,表处于独占锁状态,只能够insert和select,无法进行update和delete操作。对于大表重分布耗时长,表只读而导致业务不可用时间过长,可以pause rebalance后再cancel rebalance来释放独占锁,使业务状态正常。后期可择期再进行重分布,如果没有足够的业务空闲时间,对于少数的大表可以导出数据再load加载到新表中或create new_table as select * from old_table,然后删除旧表,重命名新表的方式来使表进行重分布。对于重分布速度不够快可以修改gcluster_rebalancing_parallel_degree参数来加快重分布。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526