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


Posted in MySQL onJune 03, 2021

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

1. 修改办法

修改/etc/my.cnf文件,将 innodb_flush_log_at_trx_commit = 1改为0, 但这样就要承担数据库Crash后,1秒内未存储到数据库数据丢失可能的风险。MySQL文档中对该参数的描述如下:

If the value of innodb_flush_log_at_trx_commit is 0, the log buffer is written out to the log file once per second and the flush to disk operation is performed on the log file, but nothing is done at a transaction commit. When the value is 1 (the default), the log buffer is written out to the log file at each transaction commit and the flush to disk operation is performed on the log file. When the value is 2, the log buffer is written out to the file at each commit, but the flush to disk operation is not performed on it. However, the flushing on the log file takes place once per second also when the value is 2. Note that the once-per-second flushing is not 100% guaranteed to happen every second, due to process scheduling issues.

2. 参数说明

  • 0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作
  • 1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认
  • 2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作

3. 注意事项

当设置为0时,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。

当设置为1时,该模式是最安全的,但也是最慢的一种方式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。

当设置为2时,该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数,当两个参数都设置为1的时候写入性能最差,推荐做法是innodb_flush_log_at_trx_commit=2,sync_binlog=500 或1000。

到此这篇关于MySQL删除和插入数据很慢的问题解决的文章就介绍到这了,更多相关MySQL删除和插入数据很慢内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL官方导出工具mysqlpump的使用
May 21 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
详细介绍MySQL中limit和offset的用法
May 06 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
mysql5.7使用binlog 恢复数据的方法
Jun 03 #MySQL
MySQL8.0无法启动3534的解决方法
zabbix监控mysql的实例方法
Mysql实现主从配置和多主多从配置
Jun 02 #MySQL
Navicat连接MySQL错误描述分析
MySQL不使用order by实现排名的三种思路总结
Jun 02 #MySQL
MySQL连接查询你真的学会了吗?
Jun 02 #MySQL
You might like
文件上传的实现
2006/10/09 PHP
使用PHP的日期与时间函数技巧
2008/04/24 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
浅谈js的异步执行
2016/10/18 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
原生JS实现拖拽功能
2020/12/16 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
python多线程socket编程之多客户端接入
2017/09/12 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
Pycharm小白级简单使用教程
2020/01/08 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
应届毕业生的个人自我鉴定
2013/10/24 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
童年读书笔记
2015/06/26 职场文书