系统用的是SSH框架,其中有一个excel导入数据的方法,导入500条数据,每条平均0.1秒
如果导入量增大, 每条平均值也会增大.到了导入3000条的时候,每条平均0.75秒.增长了近7倍!!
导入过程大体是这样的.一次性把数据从excel提取,然后写入数据库临时表. commit.
对临时表的每条数据启动一个事务,导入到正式表,同时写相关流程表.每条数据一次commit
今天用Jprofiler5.14测试了下.图片是在"CPU Views"中得到的调用方法耗时统计.
doParseShipmentImprot方法耗时1722s,占用cpu百分比为94.2%, 但是我把这个方法下所有列出都项占用的时间相加,只有700多秒.
剩下的人1000多秒时间去哪里了?
附件中的tar文件是从Cpu Views导出的文件
请熟悉JProfiler的大大们帮忙看看...是不是偶不会用.
对临时表的每条数据启动一个事务,
几千条数据插入自然会很慢,一个数据库连接支持最大的事务数也是有限,
1000多秒应该都用在等待事务提交,得到连接,开启事务的过程去了,
你应该使用批量提交数据,比如每20条数据或50条数据就提交一次事务,性能会有很大提升
每条数据一次commit
启动一次事务很耗时的,为什么不一次提交 或者批量 batch
消失的1000多秒在JDBC CALLS里
检查下你的SQL语句