适用版本
DataX 2021 年 12 月之后的版本。
问题现象
OceanBase 数据库版本为 V2.2.77 时,使用 DataX 从 OceanBase 数据库同步 3000 万条数据到其他平台仅需要 40 分钟。升级 OceanBase 到 V3.2.33 版本后,DataX 的同步速度大幅下降。
对比 DataX 的日志,OceanBase 数据库升级后出现 error when get partition list 的错误。
#升级前:
2023-02-14 18:57:20.632 [job-1585333692] INFO PartitionSplitUtil - obVersion: 2.2.77
#升级后:
2023-02-22 17:55:06.004 [job-1598694005] INFO PartitionSplitUtil - table is not partitioned.
2023-02-22 17:55:06.003 [job-1598694005] INFO PartitionSplitUtil - obVersion: 5.7.25-OceanBase-v3.2.3.3
2023-02-22 17:55:06.004 [job-1598694005] ERROR PartitionSplitUtil - error when get partition list: For input string: "25-OceanBase-v3"
问题原因
DataX 工具从 OceanBase 数据库拉取数据时,可以通过 readByPartition 参数实现按照分区切分任务逻辑,每个 task 读取一个分区,提高读取效率的同时减少 OBServer 的压力。通常,按分区切片失败是因为同时配置了 splitPk 参数,只需要把 splitPk 参数去掉即可。而在本案例中,OceanBase 数据库升级后,因为 DataX 无法准确识别 OceanBase 数据库版本号,无法判断是否支持 readByPartition,导致把分区表当做非分区表来处理。
OceanBase 数据库新版本改变了版本的标识方法,导致了 DataX 版本失败错误。
解决方法
可以选择以下任一方式来解决该问题:
修改业务租户的
version参数为 DataX 可识别的版本。set global version = '3.2.3.3';使用 splitPK 来并行拉取数据。