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 08 MySQL
MySQL EXPLAIN输出列的详细解释
May 12 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
Unity连接MySQL并读取表格数据的实现代码
Jun 20 MySQL
MySQL开启事务的方式
Jun 26 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
Mysql案例刨析事务隔离级别
Sep 25 MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 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分页类
2013/10/26 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
Python中os.path用法分析
2015/01/15 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python中字典和集合学习小结
2017/07/07 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
如何使用Pytorch搭建模型
2020/10/26 Python
Python __slots__的使用方法
2020/11/15 Python
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
C有"按引用传递"吗
2016/09/06 面试题
医学生自我评价
2014/01/27 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
工会积极分子个人总结
2015/03/03 职场文书
商业计划书之服装
2019/09/09 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS