在 OceanBase 集群中,有时候会发现系统的整体负载不高,但是会出现某个或某些节点的流量/CPU 使用率明显高于其他节点的情况。或者有时候某条 SQL 在各个节点间流量是分配不均匀的。在排查路由没有问题的情况下,如果查询(select)或者更新(insert)涉及到更新全局索引的情况下,会出现节点间流量/CPU 分配不均的情况。
详细说明
在 OceanBase 数据库中,对于某张表的查询(select)走上全局索引或者执行数据更新(insert)涉及到更新全局索引的情况下,会出现节点间流量/CPU 分配不均的情况,这是由于全局索引的 Leader 往往集中在一个节点,不管路由到哪个节点,都需要到全局索引 Leader 所在的节点执行查询/更新操作的。 例如下面的例子中,客户执行一条 insert into table on duplicate key update,本身是走主表的计划。但是注意到各个节点间流量分配不均匀。其中 2 个节点的流量明显高于另外的节点,但是表的分区/数据分布是均匀的。

进一步查看,表中包含 2 个全局索引,并且全局索引的 Leader 是分别在这 2 个流量高的节点。

对于这种情况,更新这条数据的时候,会涉及到更新全局索引,这样就会导致不均。想要均匀的话,全局索引也需要打散。 同样如果是查询语句,不管路由到哪个节点,最终查询走全局索引的话,都是需要去全局索引所在的 Leader 获取数据的。 综上所述,这是分布式数据库场景下,全局索引常见的一种使用现象,是符合预期的。
适用版本
OceanBase 数据库 V3.x、V4.x 版本。