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数据库中存入汉字报错的方法
May 06 MySQL
MySQL 存储过程的优缺点分析
May 20 MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
mysql sql常用语句大全
Jun 21 MySQL
详解MySQL的内连接和外连接
May 08 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
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
零基础php编程好学吗
2019/10/11 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
Python API自动化框架总结
2019/11/12 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
竞选文艺委员演讲稿
2014/04/28 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2015年度党员个人总结
2015/02/14 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
oracle索引总结
2021/09/25 Oracle
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android