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 慢查询日志深入理解
Apr 22 MySQL
详解GaussDB for MySQL性能优化
May 18 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
Jul 26 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
MySQL数据库超时设置配置的方法实例
Oct 15 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
MYSQL如何查看操作日志详解
May 30 MySQL
MySql数据库触发器使用教程
Jun 01 MySQL
postgresql如何找到表中重复数据的行并删除
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
PHP滚动日志的代码实现
2015/06/10 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
Python算法之栈(stack)的实现
2014/08/18 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
remote接口和home接口主要作用
2013/05/15 面试题
社会实践感言
2014/01/25 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
python+opencv实现目标跟踪过程
2022/06/21 Python