项目框架:springmvc+spring3+mybatis
数据库:mysql5.5
服务器是阿里云的,但实际上阿里云的机器是万网的,配置为
,
有这么一个需求,就是需要批处理向数据库一次性插入50000条数据,当时对表做了分区,开始是只用一次插入操作插入50000条数据,debug时到执行插入的时候就突然卡住了,卡到我的耐心资源超时,所以就把它咔嚓了。然后改了代码,换成一个java For 循环,一次只插1000条数据循环50次插入,大约7.3秒插入完成。接着又换成每次插10000条,分循环5次插入,时间为6.4秒。没道理一次50000需要这么久的时间,于是昨天临走前机器没关,让它跑一次50000条的插入,看看究竟会怎样。第二天早上发现插入失败,日志打了异常:
org.springframework.dao.TransientDataAccessResourceException:
### Error updating database. Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3500111 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
### The error may involve com.yiliwu.ecouponcard.core.dao.EcKeyMapper.insertBatch-Inline
### The error occurred while setting parameters
### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3500111 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
; SQL []; Packet for query is too large (3500111 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3500111 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
可见mysql服务器端的参数max_allowed_packet设置过小了,它默认是1M,而我们提交的Packet有3M。登录服务器,找到mysql的配置文件my.cnf,在[mysqld]下加上max_allowed_packet=16M,保存重启mysql后,一次插入50000条成功,耗时7.2秒。
对于在for循环中插入数据库操作会造成多次IO性能损耗,必然会在一定程度上减慢插入速度,所以循环50次与循环5次的差异还是可以看到的,7.3>6.4,但是一次50000条的耗时为7.2还是耐人琢磨,我将它暂时归为不完全归纳造成的误差,毕竟不同时段主机的忙闲还是会有些差异的,理论上应该会更快。
分享到:
相关推荐
mysql5.7 修改max_allowed_packet方法
今天小编就为大家分享一篇关于Mysql的max_allowed_packet设定,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
mysql设置max_allowed_packet_解决_MySQL_Error_2006
本篇文章是对修改mysql数据库的max_allowed_packet参数进行了详细的分析介绍,需要的朋友参考下
今天在部署一个实验系统的时候,报错提示需要修改一下MySQL的配置文件,在修改的时候是有技巧的,大家可以参考下本文尝试操作下
MySQL max_allowed_packet过小引起的问题报错如下com.mysql.jdbc.PacketTooBigException: Packet
主要介绍了mysql中max_allowed_packet参数的配置方法,以及查看max_allowed_packet参数当前值的方法,需要的朋友可以参考下
以下的文章主要是对MySQL性能影响关系紧密的五大配置...2、max_packet_allowed 最大数据包大小,通常等于你需要在一个大块中返回的最大数据集的大小,如果你在使用远程mysqldump,那它的值需要更大。 3、aborted_con
在使用mysql的过程中,有个问题就是mysql的... You can change this value on the server by setting the max_allowed_packet’ variable. 原因:myslq默认配置最小的需要更改 :在mysql.ini中配置参数(max_allowed_pa
数据库 由于我们正在管理多个项目,因此需要使用一个容器,该容器可以从我们的... --max_allowed_packet=32505856 使用 (Windows), (Mac OS X)之类的工具或容器本身内的CLI手动创建utf8mb4数据库。 docker exec
Linux下安装mysql安装包安装及详细步骤 (有安装包及步奏 问题解答) Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多...max_allowed_packet = 16M
我们可以通过语句查看一下允许的最大包大小:show global variables like 'max_allowed_packet'; MySQL使用最大数据包站站点进行服务器和客户端之间的通信。如果语句包含大字段,则可能由于SQL语句的大小,而被中止...
在我们使用mysql导入大文件sql时可能会报MySQL server has gone away错误,该问题是max_allowed_packet配置的默认值设置太小,只需要相应调大该项的值之后再次导入便能成功。该项的作用是限制mysql服务端接收到的包...
我用到的数据库为,mysql数据库5.7版本的 首先自己准备好数据库表 ... You can change this value on the server by setting the max_allowed_packet’ variable. 出现上面的错误是因为数据库表的 max_allowe
用下面方法解决(管理mysql用的是... set global max_allowed_packet=99328000; set global wait_timeout=2880000; set global interactive_timeout=2880000; — wait_timeout=2880000 — interactive_timeout=288