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 14 MySQL
Mysql 设置boolean类型的操作
Jun 04 MySQL
解决Mysql的left join无效及使用的注意事项说明
Jul 01 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 MySQL
MySQL 原理与优化之Limit 查询优化
Aug 14 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php自动载入类用法实例分析
2016/06/24 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
Javascript中的数学函数
2007/04/04 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
javascript中this指向详解
2016/04/23 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
python中 chr unichr ord函数的实例详解
2017/08/06 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
python批量生成条形码的示例
2020/10/10 Python
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
面试后感谢信
2014/02/01 职场文书
大学生应聘求职信
2014/05/26 职场文书
运输公司工作总结
2015/08/11 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
Go语言基础函数基本用法及示例详解
2021/11/17 Golang