为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:centos
【CPU】:
【问题描述】*:
有250份数据,每份数据大概200条数据。依次对每一份数据进行库查询,删除,批量插入操作。 用for循环250次。
删除语句 delete from table where id in(1,2,3,4,…)
查询语句 select * from a left join b on a.id=b.id
插入: 用的jdbctemplate batchupdate 进行批量插入。
现在出现的问题是: 单次执行一份数据 数据库占用cpu 17%。 循环执行250份数据, 数据库占用cpu 30-50%。 理想情况下,每次执行一份数据都是在上一份数据执行完以后再执行的,那么数据库占用cpu应该一直维持在17%左右才对。
目前开发环境是只能模拟除这样。
现场环境 数据库cpu直接升到了200%。 导致服务异常的卡。
这些表有没有类似主键这样的过滤性高的索引,你这个问题可能是由于大并发量地插入数据到同一个表引起的,如果没有任何高效的索引,那么insert语句可能需要进行全表扫描,这个过程需要对全表进行加锁,1号线程插入时,其他的线程只能等待,200多并发,其余线程只能进等待池,轮询,消耗的CPU资源还是很可观的,你也可以看看你的cpu是不是sys很高。
您这边分批次插入试试呢,您提供一下详细的插入代码看下