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();
}
}
...全文
210 点赞 收藏 3
写回复
3 条回复
xjx199403 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
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告