一个sql文件中包含ddl语句和大量的insert语句,通过source命令的方式实行脚本文件非常慢

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】
在使用obclient连接数据库,通过source执行sql文件,文件中包含create table语句和大量的insert into … values 语句,目前一个300M的文件。需要执行十多个小时。请问可以通过什么优化
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

2 个赞

推荐使用 obdiag 工具进行日志采集,以便我们确认问题所在。

日志采集场景: SQL性能问题
日志采集命令: obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

请将采集到的日志提供给我们以便进一步分析。另外,为了更好地帮助您优化执行速度,请您提供以下信息:

  1. 执行的 SQL 文件中包含的 DDL 和 INSERT 语句的大致数量是多少?
  2. 是否可以提供具体的 SQL 文件内容(如果文件较大,可以提供部分示例)?
  3. 在执行过程中,是否观察到任何错误或警告信息?
  4. 当前 OceanBase 数据库的版本号是什么?
  5. 是否可以提供执行该 SQL 文件时的负载情况(例如是否有其他并发任务在运行)?

附上敏捷诊断工具 obdiag 使用帮助链接

3 个赞

使用source的方式慢是正常的 建议使用OBLoader

3 个赞

基于ob lsm 写原理,source 批量数据是会很慢的,可以试下obload 方式

3 个赞

如果SQL之间没有先后依赖关系,可以把sql文件拆分成多个。同时执行。例如:
–10000行一个文件,文件名数字两位
split -l 10000 -d -a 2 create_index.sql create_index_

4 个赞

可以考虑使用obloader导入sql文件开并行方式

1 个赞