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 05 MySQL
将图片保存到mysql数据库并展示在前端页面的实现代码
May 02 MySQL
Mysql systemctl start mysqld报错的问题解决
Jun 03 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
MySQL修改默认引擎和字符集详情
Sep 25 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
MySQL 数据类型详情
Nov 11 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 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数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
PHP如何将XML转成数组
2016/04/04 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
JS array数组检测方式解析
2020/05/19 Javascript
Python基础语法(Python基础知识点)
2016/02/28 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
对pandas中Series的map函数详解
2018/07/25 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
python实现键盘控制鼠标移动
2020/11/27 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
python 内置函数汇总详解
2019/09/16 Python
python使用配置文件过程详解
2019/12/28 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
python烟花效果的代码实例
2020/02/25 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
农村环境卫生倡议书
2015/04/29 职场文书
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS