mysql批量插入数据量过大报错
条评论报错信息
1 | Packet for query is too large (6071393 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable. |
报错SQL
1 | insert into table_name(col1,col2) |
原因
批量插入数据时,以上SQL肯定是首选,在java中使用for循环插入,效率肯定要低。但是数据量超大时,以上sql会报错,是因为msql默认限制了。
解决办法
修改mysql配置
- 修改 my.ini, 添加以下配置。67108864则是大小,单位为字节。需要根据自己项目需求修改大小。需要重启mysql服务
1
max_allowed_packet =67108864
- 也可以登录mysql使用以下命令
1
set global max_allowed_packet = 67108864;
- 查看是否生效
1
show VARIABLES like '%max_allowed_packet%';
java中控制插入条数(推荐)
以上方法虽然能解燃眉之急,但是如何保证以后不会超过你设置的值?当达到一定量时,JVM也会内存溢出,数据库压力也扛不住。
1 | import com.google.common.collect.Lists; |
以上代码为,将要修改数据分隔成多份,每一份的大小为1000(不要写魔法值哦)个。每一份插入一次。
- 本文链接:https://www.ofcoder.com/2018/06/20/sql/mysql%E6%89%B9%E9%87%8F%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%E9%87%8F%E8%BF%87%E5%A4%A7%E6%8A%A5%E9%94%99/
- 版权声明:Copyright © 并发笔记 - ofcoder.com. Author by far.
分享