使用ob的导数工具导入数据太慢

【 使用环境 】 测试环境
【 OB or 其他组件 】obloader Version: 4.3.3-RELEASE
【 使用版本 】ob 4.2.5.2
【问题描述】尝试提高租户的线程为64,内存20G,但是速度未有明显提升
导入500M左右的数据库需要Load record finished. Total Elapsed: 41.17 s
导入命令"${OB_LOADER_HOME}/bin/obloader"
-h $HOST
-P $PORT
-u root@${TENANT}
-p $PASSWORD
-D $target_db
–sql
–all
-f $backup_dir
–batch 500
–thread 64; then

调整obloader过此参数
JAVA_OPTS="$JAVA_OPTS -server -Xms16G -Xmx16G -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -Xss352K"

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据您提供的信息,使用 obloader 导入数据时速度较慢的问题可能涉及多个方面。以下是一些可能的原因和优化建议:

1. 检查导入模式

  • 根据文档库中的信息,obloader 提供了两种写入模式:Client 模式Server 模式
    • Client 模式 使用 JDBC 或旁路导入(DIRECT)将数据插入 OceanBase 数据库。
    • Server 模式 集成 LOAD DATA 将数据导入 OceanBase 数据库。
  • 建议:尝试切换到 Server 模式以提高性能。可以通过在命令中添加参数 --server-mode 来启用 Server 模式。
"${OB_LOADER_HOME}/bin/obloader" \
    -h $HOST \
    -P $PORT \
    -u root@${TENANT} \
    -p $PASSWORD \
    -D $target_db \
    --sql \
    --all \
    -f $backup_dir \
    --batch 500 \
    --thread 64 \
    --server-mode;

依据OceanBase 生态工具介绍 → 迁移同步工具 → obloader/obdumper


2. 调整批处理大小 (--batch)

  • 当前的批处理大小为 500,可能过小或过大导致性能问题。
  • 建议:尝试调整 --batch 参数的值,例如设置为 1000 或 2000,找到适合的批量大小。
--batch 1000

依据使用导数工具进行数据迁移 → 导数工具介绍 → obloader


3. 优化线程数 (--thread)

  • 当前线程数设置为 64,但实际效果可能受到硬件资源限制。
  • 建议
    • 确保目标 OB 集群有足够的 CPU 资源支持高并发。
    • 可以尝试减少线程数(如 32 或 16),观察是否能提升性能。
    • 如果硬件资源充足,可以适当增加线程数,但需注意不要超过系统承载能力。
--thread 32

4. 检查 Java 内存配置

  • 您已经设置了较大的 Java 堆内存(-Xms16G -Xmx16G),但可能仍存在内存不足的情况。
  • 建议
    • 确保 JVM 参数配置合理,避免 OOM 或 GC 压力过大。
    • 如果仍有问题,可以尝试减少堆内存大小(如 -Xms8G -Xmx8G),并观察性能变化。

依据使用导数工具进行数据迁移 → 环境准备和安装 → 运行环境


5. 检查数据文件格式

  • obloader 支持多种数据文件格式(如 CSV、INSERT SQL、Apache ORC 和 Apache Parquet)。如果数据文件格式复杂或不规范,可能导致导入性能下降。
  • 建议
    • 确保数据文件格式简单且符合 obloader 的最佳实践。
    • 如果使用的是 CSV 文件,确保字段分隔符和转义字符正确。

依据OceanBase 生态工具介绍 → 迁移同步工具 → obloader/obdumper


6. 检查目标表的索引和约束

  • 如果目标表存在大量索引或约束,可能会显著降低导入性能。
  • 建议
    • 在导入前禁用索引和约束,导入完成后重新启用。

    • 使用以下 SQL 语句禁用索引:

      ALTER TABLE your_table_name DISABLE KEY CHECKS;
      
    • 导入完成后重新启用索引:

      ALTER TABLE your_table_name ENABLE KEY CHECKS;
      

依据产品 FAQ → 产品架构和特点 FAQ → 使用 OceanBase 数据库在开发中要特别注意什么?


7. 检查网络带宽

  • 如果数据文件存储在远程服务器上,网络带宽可能成为瓶颈。
  • 建议
    • 确保网络带宽充足。
    • 如果可能,将数据文件复制到本地磁盘后再执行导入操作。

8. 启用断点续传和错误重试

  • obloader 支持断点续传和错误自动重试功能,可以避免因网络波动或其他原因导致的性能下降。
  • 建议:确保启用了这些功能。
--resume
--retry-times 3

依据OceanBase 生态工具介绍 → 迁移同步工具 → obloader/obdumper


总结

通过以上优化措施,您可以逐步排查并解决 obloader 导入数据速度慢的问题。如果问题仍未解决,建议使用 OceanBase 敏捷诊断工具 obdiag 收集诊断信息,并联系 OceanBase 技术支持团队获取进一步帮助。

更多信息请查看:

  1. 使用导数工具进行数据迁移
  2. 迁移同步相关生态组件介绍
  3. SQL 性能问题的典型场景和排查思路
  4. 产品 FAQ
  5. OceanBase 生态工具介绍
  6. 设置日志同步限速
  7. 导入数据概述
  8. lob_enable_block_cache_threshold
1 个赞

OBLOADER的文档有性能优化建议,可以从 命令行选项调优、 虚拟机参数调优、 数据库内核调优三个地方优化,接着还可以看看SQL诊断里有没有查询的慢SQL,基本的优化手段就这样了 :joy:

https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000002401642

要是OCP 接管了的集群,发下您导入数据的 TPS 等监控吧