select 快,insert ... select 非常慢

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】OB For MySQL, 5.7.25-OceanBase CE-v4.2.1.4
【问题描述】程序中,会有一段操作实表临时表的步骤,先delete临时表(delete tableA where userid = xxx),然后对表进行insert…select …from tableA …,此时insert就会卡住,大概要执行80s,插入0条或者1条数据。如果只是select,只需要0.05s左右。java程序稳定复现,命令行不稳定复现。
【复现路径】
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

推荐使用 obdiag 工具进行根因分析和日志采集,这可以帮助我们定位问题并找到解决方案。请尝试以下操作,并将采集到的日志提供给我们。

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

上述命令中的 trace_id 需要替换为您执行 insert...select 操作时的具体 trace_id,可以通过 show processlist; 获取当前执行的 SQL 的 trace_id

为了更好地帮助您解决问题,请您提供一些额外的信息:

  1. 可以提供执行 insert...select 语句前后 tableA 的表结构吗?例如通过 show create table tableA\G 命令获取。
  2. tableA 表的数据量是多少?可以提供表的大概行数吗?
  3. 在执行 insert...select 操作时,系统是否有大量的并发操作?
  4. delete 临时表和 insert...select 操作之间是否有其他操作?如果有,请详细说明。
  5. 是否可以提供执行 deleteinsert...select 操作的完整 SQL 语句?
  6. 该问题是否在某个特定的时间段内更容易出现?如果有,请提供时间段信息。
  7. 是否已经检查过系统的 IO 负载情况?如果有,请提供相关信息。

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

ob应该没有临时表的功能 如果频繁操作可以创建queuing表

1 个赞