springBoot+mybatis BATCH模式批量插入数据,效率越来越慢

fangLei1993 2019-03-26 11:31:46
先贴代码,正常的BATCH模式入库。
入库数据是从hornetq消息队列读取,约1000W数据量
入库效率刚开始10000条数据,约5000ms;入库上百万后,入库效率明显变低,10000条数据,入库需20000ms

个人猜测可能的原因:1.oracle数据库入库效率问题;2.hornetq队列积压,处理不过来,导致入库效率慢(这个会导致入库慢吗?)
求助!!!

private void save(final List<DSOnlineOrder> orders) {
if (orders == null || orders.isEmpty()) {
return;
}
SqlSession sqlSession = null;
DSOnlineOrderMapper mapper;
try {
sqlSession = toFactory.openSession(ExecutorType.BATCH, false);
mapper = sqlSession.getMapper(DSOnlineOrderMapper.class);
for (DSOnlineOrder dsPayOrder : orders) {
mapper.insertSelective(dsPayOrder);
}
sqlSession.commit();
sqlSession.clearCache();
} catch (Exception e) {
if (sqlSession != null)
sqlSession.rollback();
logger.error("save dspayorder error:", e);
} finally {
if (sqlSession != null)
sqlSession.close();
}
}
...全文
5092 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengerdi 2021-11-18
  • 打赏
  • 举报
回复

img

xjx199403 2021-05-18
  • 打赏
  • 举报
回复
我也想知道为什么,batch模式大数据量时,越往后越慢
fangLei1993 2019-03-26
  • 打赏
  • 举报
回复



入库条数和入库时间前后对比。。。
stacksoverflow 2019-03-26
  • 打赏
  • 举报
回复
用insert all试一下,参考: <insert id ="insertBatch" parameterType="java.util.List"> INSERT ALL <foreach collection ="itemList" item= "item"> INTO TABLEAAA (C1, C2) values (#{item.c1},#{item.c2}) </foreach > SELECT * FROM dual </insert > 参考 自增有:https://qiita.com/yang1005/items/951cb8bc5aff23e6355e 自增无:https://qiita.com/yang1005/items/05488893fb3d4cfc58c0

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧