我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql-Insert插入过慢的原因记录和解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql-Insert插入过慢的原因记录和解决

场景

先来说下业务场景, A单位每天下发全量数据5万数据左右,我们需要将这5万条数据处理到主表中以及日志表中

我们现在的逻辑是,先将数据每次100条批量修改或者插入到主表中, 然后我们通过事件监听将每次插入或者修改的动作都记录到日志表中

问题: 因为我们插入日志表的时候是每次处理一条这样就导致了5万条日志数据,一个一个插入非常耗时,抱着能提升一点就提升一点的想法,我们看看插入还能优化吗?

先来说一下: Mysql中单条语句原子性的,所以高并发情况下不会有安全性问题

说说插入会慢的影响因素:

  1. Mysql插入缓存(bulk_insert_buffer_size 默认是8M)
  2. 每条数据在插入的时候都要验证是否违反表中的约束条件(主键,唯一等)
  3. 构建新数据的索引
  4. innodb中,数据通常都是先写缓存,再写事务日志,再写入数据文件
  5. Mysql 每秒最大支持16384并发 ,但是默认只有151可以设置max_connections数量
  6. 服务器性能,cpu,硬盘,网络, 网络数据传输 ,代码解析
  7. 数据库事务影响

解决办法

先设置mysql的插入缓存bulk_insert_buffer_size=100M,确保一次能插入1000条数据
然后使用List方式记录需要插入的数据当达到1000条之后我们批量一次性插入insert into tablename values('xxx','xxx'),('yyy','yyy'),('zzz','zzz')...... 然后在清空List ,插入的过程中我们可以异步,不用等待结果的返回 ,通过上面的方案, 插入100万数据几十秒就完事了

为什么要这样解决呢?

因为批量插入其实就是访问一次数据量告诉数据库我需要执行这1000条的插入,而不是访问1000次数据库告诉数据库我要执行1条的插入所以使用批量插入大大的缩减客户端与数据库之间的连接、关闭等消耗 , 所以我们在上面的方案中使用一次提交批量数据的更新的语句,那么还有没其他的方式呢?

MySQL 的事务自动提交模式默认是开启的,其对 MySQL 的性能也有一定得影响。也就是说如果你执行1000 条插入语句,MySQL 就会提交 1000 次事物,这大大影响了插入数据的速度。我们还可以在代码中,手动开启事物也就是相当于希望事物内执行的语句要作为一个“不可分割”的整体去执行的任务当所有任务完毕后在提交事物,当然这样是没有批量插入快的但是也能节约不少时间的

在这里插入图片描述

点赞 -收藏-关注-便于以后复习和收到最新内容
有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
在本博客学习的技术不得以任何方式直接或者间接的从事违反中华人民共和国法律,内容仅供学习、交流与参考
免责声明:本文部分素材来源于网络,版权归原创者所有,如存在文章/图片/音视频等使用不当的情况,请随时私信联系我、以迅速采取适当措施,避免给双方造成不必要的经济损失。
感谢,配合,希望我的努力对你有帮助^_^

来源地址:https://blog.csdn.net/weixin_45203607/article/details/126402379

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql-Insert插入过慢的原因记录和解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql-Insert插入过慢的原因记录和解决

场景 先来说下业务场景, A单位每天下发全量数据5万数据左右,我们需要将这5万条数据处理到主表中以及日志表中 我们现在的逻辑是,先将数据每次100条批量修改或者插入到主表中, 然后我们通过事件监听将每次插入或者修改的动作都记录到日志表中 问
2023-08-23

MySQL删除和插入数据很慢的问题解决

公司开发人员在测试环境中执行一条 insert 语句时,需要花费 10 几秒才可以执行成功。查看测试环境数据库性能、数据量、死锁等信息,均为发现异常。最后通过修改日志写入方式解决此问题。 1. 修改办法修改/etc/my.cnf文件,将 i
2022-05-14

MySQL插入不了中文数据问题的原因及解决

目录前言原因:具体解决方法:创建数据库时设置字符集为utf8修改数据库配置文件(比较麻烦)总结 前言我们使用mysql可能会遇到加入中文报错的情况,如下。报错:非法的字符编程客栈值 放入 ‘name’ 为什么
2023-05-05

php插入数据库发生乱码的原因和解决方法是什么

本篇内容主要讲解“php插入数据库发生乱码的原因和解决方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php插入数据库发生乱码的原因和解决方法是什么”吧!1、编码问题插入数据库时发生乱码
2023-07-05

编程热搜

目录