mysql异常处理--PacketTooBigException

原因:

        批量插入或更新数据量过大,易出现PacketTooBigException问题

方案一:

        1、查看max_allowed_packet当前值:show VARIABLES like '%max_allowed_packet%';

        2、举例设置更大值20M:set global max_allowed_packet = 20*1024*1024; 

         备注:有些版本在修改了值之后,需要退出当前session重新登录(或者关闭mysql客户端再次打开登录),才会看到值修改后的变化。

方案二:

        1、编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改:max_allowed_packet = 20M

        2、在当前目录及子目录下查找名称中包含conf的文件: $ find . -type f -name "*conf*"

方案三:

        分多次插入或更新数据

                // 1、设定每次插入1000条数据
                int batchSize = 1000;
                // 2、获取总共插入次数

                int step = (longOrderList.size() % batchSize == 0) ? (longOrderList.size() / batchSize) : (longOrderList.size() / batchSize + 1);
                // 3、存储总共插入的条数

                int success = 0;
                // 分批插入并计算当前已插入的总条数

                for (int i=0; i < step; i++) {
                    List<Map<String, Object>> subList = null;
                    if (i == step -1){
                        subList = longOrderList.subList(i * batchSize, longOrderList.size());
                    }else {
                        subList = longOrderList.subList(i * batchSize, (i+1) * batchSize);
                    }
                    success  += serOrderParkingService.insertUnusualOrderBatch(subList);
                }
                logger.info("批量插入超长订单条数{}",success);

                if (success != longOrderList.size()){
                    logger.error("超长订单--批量插入和要插入的数据大小不一致!");   

                 }
          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值