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 EXPLAIN输出列的详细解释
May 12 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
mysql 获取相邻数据项
May 11 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 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中的串行化变量和序列化对象
2006/09/05 PHP
php smarty模版引擎中的缓存应用
2009/12/02 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
js实现左右轮播图
2020/01/09 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
Python中的字典与成员运算符初步探究
2015/10/13 Python
python读取文件名称生成list的方法
2018/04/27 Python
Python global全局变量函数详解
2018/09/18 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
python数据预处理方式 :数据降维
2020/02/24 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
如何强制垃圾回收
2015/10/06 面试题
出生证明公证书
2014/04/09 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
贷款收入证明格式
2015/06/24 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL