GBase 8a
适配迁移
文章

Gbase 8a 重分布具体过程

发表于2025-03-04 16:36:45265次浏览5个评论

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参数来加快重分布。

评论

登录后才可以发表评论
崔哥发表于 8个月前
人生贵相知,何用金与钱
用户头像
levvel发表于 8个月前
嗯,只能说不错!
崔哥发表于 7个月前
堆枕乌云堕翠翘。午梦惊回,满眼春娇。嬛嬛一袅楚宫腰。那更春来,玉减香消。柳下朱门傍小桥。几度红窗,误认鸣镳。断肠风月可怜宵。忍使恹恹,两处无聊。
用户头像
levvel发表于 5个月前
评论是对发帖人的一种尊重
用户头像
柒柒天晴发表于 2个月前
加油