Mysql数据库中的redo log 写入策略和binlog 写入策略
作者:男人要霸气 发布时间:2024-01-27 08:21:14
redo log的写入策略
InnoDB提供了innodb_flush_log_at_trx_commit参数,它有三种可能取值:
设置为
0
的时候,表示每次事务提交时都只是把redo log
留在redo log buffer
中;设置为
1
的时候,表示每次事务提交时都将redo log
直接持久化到磁盘;设置为
2
的时候,表示每次事务提交时都只是把redo log
写到page cache
。
查看mysql变量:show VARIABLES LIKE 'innodb_flush_log_at_trx_commit'
binlog的写入策略
binlog的写入策略,write 和fsync的时机,是由参数sync_binlog控制的:
sync_binlog=0
的时候,表示每次提交事务都只write
,不fsync
;sync_binlog=1
的时候,表示每次提交事务都会执行fsync
;sync_binlog=N(N>1)
的时候,表示每次提交事务都write
,但累积N
个事务后才fsync
。
因此,在出现IO瓶颈的场景里,将sync_binlog
设置成一个比较大的值,可以提升性能。在实际的业务场景中,考虑到丢失日志量的可控性,一般不建议将这个参数设成0
,比较常见的是将其设置为100~1000中的某个数值。
但是,将sync_binlog
设置为N
,对应的风险是:如果主机发生异常重启,会丢失最近N
个事务的binlog
日志。
生产配置
通常情况下,生产都是" 双1 "的配置
,也就是sync_binlog
和 innodb_flush_log_at_trx_commit
的配置都是1
,也就是说,一个事务完整提交前,需要等待两次刷盘,一次是redo log
,一次是binlog
。
性能瓶颈
如果你的MySQL现在出现了性能瓶颈,而且瓶颈在IO上,可以通过哪些方法来提升性能呢?
针对这个问题,可以考虑以下三种方法:
设置
binlog_group_commit_sync_delay
和binlog_group_commit_sync_no_delay_count
参数,减少binlog的写盘次数。这个方法是基于“额外的故意等待”来实现的,因此可能会增加语句的响应时间,但没有丢失数据的风险。将
sync_binlog
设置为大于1的值(比较常见是100~1000)。这样做的风险是,主机掉电时会丢binlog日志。将
innodb_flush_log_at_trx_commit
设置为2。这样做的风险是,主机掉电的时候会丢数据。
我不建议你把innodb_flush_log_at_trx_commit
设置成0。因为把这个参数设置成0,表示redo log
只保存在内存中,这样的话MySQL本身异常重启也会丢数据,风险太大。而redo log
写到文件系统的page cache
的速度也是很快的,所以将这个参数设置成2
跟设置成0
其实性能差不多,但这样做MySQL异常重启时就不会丢数据了,相比之下风险会更小。
来源:https://blog.csdn.net/weixin_42740530/article/details/124413921


猜你喜欢
- 本文主要介绍的是vue.js插入dom节点的方法,下面话不多说,来看看详细的介绍吧。html代码:<div id="app&
- 先来看这行代码:<script src = "allMyClientSideCode.js"></sc
- mysql的in会让索引失效吗?不会! 看结果:mysql> desc select * from tb_province where
- 功能:创建两个滑动条来分别控制高斯核的size和σσ的大小,这个程序是在阈值分割的那个程序上改动的。阈值分割程序在这 注意:由于σ=0σ=0
- 1、纯粹的截取字符串function cutstr(thestr1,strlen) dim l,t,c&nbs
- Crawler全名是DomCrawler,是Symfony框架的组件。令人发指的是DomCrawler的没有中文文档,Symfony也没有翻
- 一张表(ColumnTable)的结构如下图所示当前需要实现的功能:通过Number的值为67来获取当前的节点ID、父节点ID递归实现SQL
- 相信各位网页爱好者都对网页的loading很感兴趣吧!,想不想知道如何做一个:)现在给大家介绍一下一种loading的制作..效果图:loa
- 前言pygame中的精灵碰撞是可见游戏中用的最基础的东西,这里结合官方文档和小甲鱼的网站上的内容做个小总结,方便日后使用。pygame.sp
- 摘要:将英文单词首字母变成大写是一个古老的话题,很常用,也很简单。不过如何用更简单的方式批量完成这个工作,则有很多学问,不想来看看吗!将英文
- 一、wordcloud库是什么?Python的wordcloud库是一个用于生成词云的Python包。它可以将一段文本中出现频率高的单词按其
- 现在同类型的网站数不胜数,网站的功能或服务日趋同质化,大的方面看不出什么差别,差别就体现在细节上。“窥斑见豹”,细节成为网站最有力的表现形式
- 从实时视频流中识别出人脸区域,从原理上看,其依然属于机器学习的领域之一,本质上与谷歌利用深度学习识别出猫没有什么区别。程序通过大量的人脸图片
- 本实验中分别针对空库、脱机、联机三种方式,配置一主两从的mysql标准异步复制。只做整服务器级别的复制,不考虑对个别库表或使用过滤复制的情况
- 问题Jupyter Notebook可以说是非常好用的小工具,但是不经过配置只能够在本机访问笔者参阅了文档对jupyter notebook
- 负责Web编写的前端人员,都清楚可以通过W3验证服务功能,来在线验证自己编写的XHTML代码是否正确,在验证期间,最容易出现的错误往往都是在
- 本文实例讲述了PHP实现ASCII码与字符串相互转换的方法。分享给大家供大家参考,具体如下:<?phpclass ascii { &n
- SQL1: --1、查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (102
- 方法方法能给用户自定义的类型添加新的行为。它和函数的区别在于方法有一个接收者,给一个函数添加一个接收者,那么它就变成了方法。接收者可以是值接
- 记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项。单个文件的读操作:我们先假设一个需求如下:读取一个t