MySQL binlog和redolog的写入机制
binlog的写入机制
每个线程都会先将日志写入到binglog cache, 事务提交的时候,再把binlog cache写到binlog文件中。所有线程都写一个binlog日志。
binlog_cache_size 用于控制单个线程内binlog cache 所占内存的大小,如果超过了这个参数规定的大小,就要暂存到磁盘。
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 中的某个数值。
redo log 的写入机制
redo log 也是写入缓存,redo log buffer 之中。
redo log 事务提交时是否fsync,由参数innodb_flush_log_at_trx_commit控制:
- 为0的时候,不做任何操作。redo log还是在redo log buffer之中。
- 为1的时候,每次提交事务就把redo log buffer fsync到磁盘
- 为2的时候,只是把redo log 写到page cache
此外,innodb 后台线程会每隔1秒将 redo log buffer中的日志,写入文件系统的page cache,然后调用fsync持久化到磁盘。因此,一个还没提交的事务,其在redo log buffer中的redo log会被后台线程持久化。
还有两种情况,redo log buffer会持久化
- redo log buffer大小占用达到innodb_log_buffer_size 一半,后台线程主动写盘。事务没有提交,只是写道page cache
- 当设置innodb_flush_log_at_trx_commit, 其他事务提交了,顺带将redo log buffer中的提交了
组提交机制
redo log 是有序号的,(log sequence number, LSN), 组提交机制指的时, 序号大的事务提交后,可以保证小于等于这个需要的redo log 都持久化到磁盘了。
(trx1, trx2, trx3) 这一组事务,trx3 提交了,调用fsync可以将之前的都持久化到磁盘。
binlog 也可以通过参数设置组提交的效果
如果你想提升 binlog 组提交的效果,可以通过设置 binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count 来实现。
- binlog_group_commit_sync_delay 参数,表示延迟多少微秒后才调用 fsync;
- binlog_group_commit_sync_no_delay_count 参数,表示累积多少次以后才调用 fsync。
如果你的 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。这样做的风险是,主机掉电的时候会丢数据
MySQL binlog和redolog的写入机制的更多相关文章
- 谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的
目录 一.binlog 的高速缓存 二.刷盘机制 三.推荐的策略 推荐阅读 问个问题吧!为什么你需要了解binlog的落盘机制呢? 我来回答一下: 上一篇文章提到了生产环境中你可以使用binlog ...
- [转]mysql binlog in realtime
原文:http://guweigang.com/blog/2013/11/18/mysql-binlog-in-realtime/ 众所周知,MySQL是最受欢迎的互联网数据库(没有之一)—————— ...
- Mysql binlog日志解析
1. 摘要: Mysql日志抽取与解析正如名字所将的那样,分抽取和解析两个部分.这里Mysql日志主要是指binlog日志.二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根 ...
- 一个分布式 MySQL Binlog 存储系统的架构设计
1. kingbus简介 1.1 kingbus是什么? kingbus是一个基于raft强一致协议实现的分布式MySQL binlog 存储系统.它能够充当一个MySQL Slave从真正的Mast ...
- 20180705关于mysql binlog的解析方式
来自:https://blog.csdn.net/u012985132/article/details/74964366/ 关系型数据库和Hadoop生态的沟通越来越密集,时效要求也越来越高.本篇就来 ...
- 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原
一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...
- 怎么避免从删库到跑路 -- 详解 mysql binlog 的配置与使用
1. 引言 使用数据库的时候,我们每个操作都十分小心,尤其是不能直接在数据库上执行 update.delete 等操作,否则万一忘记加全 where 条件,可能就会造成无法挽回的结果. 有一句十分流行 ...
- 基于MySQL Binlog的Elasticsearch数据同步实践
一.为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数 ...
- java面试一日一题:binlog undolog redolog的区别
问题:请讲下mysql中binlog.undolog.redolog三种日志的区别 分析:mysql中这三种日志很常见,也是面试中涉及比较多的方面,要理解清楚这三种日志的定位及区别: 回答要点: 主要 ...
- MySQL-技术专题-MySQL主从架构以及[半同步机制]模式大全
MySQL的主从复制 一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的. 主要是可以通过为数据库服务器配置一个或多个备库的方式来进行数据同步. 复制的功能不仅有利于构建高 ...
随机推荐
- Elastic学习之旅 (12) .NET 6应用集成ES - 下
大家好,我是Edison. 上一篇:.NET集成ES进行CRUD 写在开头 在.NET应用中集成ES一般涉及两个方面: (1)将ES当存储用,类似于MongoDB,做文档的增删查改,这一类操作偏CRU ...
- golang+vue3开发的一个im应用
这是一個开源的前后端分离的IM网页应用. 简单的功能 支持微博登录 端对端消息推送.图片发送.表情包 语音功能 视频功能 支持离线消息推送 创建群聊 群聊消息推送 好友功能 响应式的前端界面支持pc与 ...
- 用java的眼光看js的oop
前言 都知道javascript的class只是语法糖而已,所以没法去对比,不在一个层次. 但是既然有了,总会有好奇的去对比. 那就对比一下. 面向对象的三个经典特性 封装 继承 多态 封装 指的是将 ...
- CMake 实践 小结
网上已经有很多的CMake的总结也好博客也好. 全当个人的记录.如果有错误务必留言. what is CMake? 一般来说就是一个自动生成makefile的工具.--脚本语言. why learn ...
- 线性代数 A 的 LU 分解
我们本章的目的是对 \(A=LU\) 进行分析,我们以这种思路来看待高斯消元. 好现在还是从简单的开始. 首先,讲一下上一章中没讲完的内容--乘积的逆. 假设 \(A\) 和 \(B\) 均是可逆矩阵 ...
- .net 5框架的安装使用
最近看到.NET 5 有预发行版本可以尝鲜,果断下载下来体验一下.我是看2020年4月2日微软.NET 团队的项目经理 Richard 在博客进行安装的,现将主要步骤写一下以供小伙伴参考. 微软.NE ...
- 谷云科技RestCloud全面接入DeepSeek 开启智能新时代
在数字化转型的浪潮中,谷云科技始终走在数据集成与智能应用领域的前沿.近期,随着 DeepSeek 的火爆出圈,谷云科技紧跟技术趋势,对旗下两大核心产品 -- 数据集成软件 ETLCloud 和 AI ...
- 假期充电: 一道并发java面试题的N种解法
疫情居家隔离期间,在网上看了几个技术教学视频,意在查漏补缺,虽然网上这些视频的水平鱼龙混杂,但也有讲得相当不错的,这是昨晚看到的马老师讲的一道面试题,记录一下: 如上图,有2个同时运行的线程,一个输出 ...
- win10系统出现虚拟内存不足的问题
最近有电脑基地的用户发现,用windows10系统的电脑物理内存已经16G,不过在使用程序时还是会弹出虚拟内存不足,将关闭**程序的问题,而系统也变的很卡,但是,出现虚拟内存不足如何设置呢?下面技术员 ...
- 将AtomicInteger对象作为方法的局部变量, 传递给其他线程, 读写操作是否是线程安全的?
目录 将AtomicInteger对象作为方法的局部变量, 传递给其他线程, 读写操作是否是线程安全的? 场景 代码 运行结果 总结 将AtomicInteger对象作为方法的局部变量, 传递给其他线 ...