9.4.6 定期合并限速
定期合并期间系统的压力较大,需要控制定期合并的速度,避免影响正常服务。定期合并限速的措施包括如下步骤:
1)ChunkServer:ChunkServer定期合并过程中,每合并完成若干行(默认2000行)数据,就查看本机的负载(查看Linux系统的Load值)。如果负载过高,一部分定期合并线程转入休眠状态;如果负载过低,唤醒更多的定期合并线程。另外,RootServer将UpdateServer冻结的大版本通知所有的ChunkServer,每台ChunkServer会随机等待一段时间再开始执行定期合并,防止所有的ChunkServer同时将大量的请求发给UpdateServer。
2)UpdateServer:定期合并过程中ChunkServer需要从UpdateServer读取大量的数据,为了防止定期合并任务用满带宽而阻塞用户的正常请求,UpdateServer将任务区分为高优先级(用户正常请求)和低优先级(定期合并任务),并单独统计每种任务的输出带宽。如果低优先级任务的输出带宽超过上限,降低低优先级任务的处理速度;反之,适当提高低优先级任务的处理速度。
如果OceanBase部署了两个集群,还能够支持主备集群在不同时间段进行“错峰合并”:一个集群执行定期合并时,把全部或大部分读写流量切到另一个集群,该集群合并完成后,把全部或大部分流量切回,以便另一个集群接着进行定期合并。两个集群都合并完成后,恢复正常的流量分配。