mysql日志持久化机制

news2025/1/18 17:11:08

文章目录

    • 前言
    • binlog的持久化机制
    • redo log 的持久化机制
    • 组提交
    • MySQL的io瓶颈性能优化
    • 总结

前言

之前的文章介绍过,mysql 的日志是保证数据恢复的关键。那么日志肯定是要持久化到磁盘的,不然也会出现断电或者重启丢失的问题。那么接下来,我们将详细介绍下数据库的日志是怎么持久化到磁盘的。

binlog的持久化机制

binlog写入磁盘的顺序大致是这样的,首先写入binlog cache,然后写入page cahe ,最后持久化到磁盘。如下图
在这里插入图片描述
write 和 fsync的机制,都是由参数sync_binlog控制的
sync_binlog = 0 时 每次提交事务只 write 不fsync
sync_binlog = 1 时 每次提交事务都会fsync
sync_binlog = n 时 每次提交事务都会 write ,但是攒到n个事务之后,再一起提交

redo log 的持久化机制

redo log 日志刚开始时放在redo log buffer 里面,之后才会写道page cache里面,最后才会持久化到磁盘。但是,它们两个的写入机制有一点不一样,就是 redo log buffer 是公用的,但是binlog cache 是每个线程单独的。
与binlog 一样,redo log同样受到innodb_flush_log_at_trx_commit 参数控制
innodb_flush_log_at_trx_commit = 0 的时候,每次提交都是把事务留在redo log buffer
innodb_flush_log_at_trx_commit = 1 的时候,每次提交都持久化到磁盘
innodb_flush_log_at_trx_commit = 2 的时候,每次提交都只写道page cache 里
听完上面的描述,大家有没有发现一个问题。那就是redo log buffer 既然是公用的,那么它会不会存在用的事务提交了,有的事务还没提交,都一起被写入到磁盘了。答案是有的,造成这个现象有以下几种场景。
1.因为innodb 会每隔一秒就会把redo log buffer 里面的内容持久化到磁盘(不知道这个会不会和上面参数的设置冲突)
2.redo log buffer 占到innodb log buffer size的一半的时候,后台线程会将redo log buffer里面的日志,持久化到磁盘(这个有点像刷脏页操作)
3.当有一个事务提交之后,持久化日志到磁盘的时候,可能会顺带着把没有提交事务的日志也给持久化到磁盘。

组提交

这个算是日志持久化的一个优化机制。首先说下日志逻辑序列号lsn,因为日志是顺序写入的,所以lsn是单调递增的,假如事务a的写入点为50,事务长度为20,假设只有事务a的情况下。事务a提交的时候,它持久的日志部分就是50到70.
组提交其实就是,假设事务a开始的时候在50,但是期间又有事务b,事务c等等,所以当它提交的时候lsn可能直接是150,那么持久化的时候,就会直接将50到150的全部给持久化了。明白这个,你就理解上面有的事务还没提交都一起被写入到磁盘的第三个场景了。
同样的,组提交也受 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瓶颈性能优化

其实你仔细看过上面的介绍,大致就应该知道了。
1.就是设置binlog_group_commit_sync_delay 和binlog_group_commit_sync_no_delay_count 参数,尽可能的保证每次写磁盘,多写入一些数据。
2.将sync_binlog = n,尽量等事务多一些,再写入磁盘。
3. innodb_flush_log_at_trx_commit = 2,目的和上面两个差不多一样。

总结

本篇文章详细介绍了日志的持久化机制。同时,通过分析总结了一些io性能的优化建议。希望大家日后遇到对应业务场景的时候可以派上用处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哈佛大学:三个简单的方式,患癌风险降低60%以上

癌症是全球主要的公共卫生问题,近年来,由于饮食、环境、人口的老龄化等因素,全球癌症发病率不断增长,癌症作为主要死因的情况日益突出。根据国际癌症研究机构(IARC)发布的2020年全球最新癌症数据&#xff0…

求斐波那契数(递归,非递归)

目录 一、斐波那契数? 二、递归实现求第n个斐波那契数 2.1代码与运行结果 2.1.1图解递归过程 三、非递归求法 3.1为什么不用递归求法 3.2非递归 一、斐波那契数? 它指的是这样的数列:1,1,2,3&#xff0…

【附源码】计算机毕业设计JAVA智能社区管理系统

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

安泰测试-信号发生器常见的故障与解决方法

信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。在测量各种电信系统或电信设备的振幅特性、频率特性、传输特性及其它电参数时,以及测量元器件的特性与参数时,用作测试的信号源或激励源,经常和示波器是老搭档,也是…

三菱FX3U——ST编程流水灯

当D0的默认值为0时,赋值1; TON_1每隔1秒触发输出M1,M1触发D0左移一位,D0的值相当于每1秒乘以2; 在通过M1复位定时TON_1; 每一秒使一个输出得电,当D0的值不在选项内的值,将D0赋值为0&#xff1…

无序和混乱终结者,极狐GitLab Workflow 到底有什么魔力?

效率和质量是软件产品追求的两个核心关键点,软件产品研发是一个覆盖多阶段、涉及多团队的过程,业界也已经总结出了一些很好的实践,在保证研发效率的同时还能保证代码质量。比如代码提交规范、Code Review、代码准入、CI/CD。 但是由于缺乏行之…

冒死开源。阿里新产Spring Boot+Spring Cloud微服务开发实战笔记

昨天跟粉丝聊到了一个问题,他说现在很多招聘要求需要有微服务经验,本人目前生产上没有微服务经验,该如何弥补? 小编在这儿就分享一份学习资料,这份资料既是初学者学习微服务开发的技术宝典,又是中级开发人…

不同版本的谷歌浏览器跨域怎么设置?

由于项目前端使用8001端口,后端使用的8080端口,因此前端调用后端接口时需要跨域,在浏览器中需要设置跨域,否则会由于跨域安全性导致请求失败。 一. 浏览器版本大于49 1.在chrome中,需要新建一个chrome浏览器的快捷方…

HiveSQL分位数函数percentile()使用详解+实例代码

前言 作为数据分析师每个SQL数据库的函数以及使用技能操作都得点满,尤其是关于统计函数的使用方法。关于统计出数据的中位数,众数和分位数的方法必须掌握几种,一般在实际业务上大部分都是以写SQL查询为主,因为如果想用Python的Pa…

植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(下)

植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(下)36、全屏秒杀37、秒杀实现37、PVZ聚怪38、种植CALL的查找与调用39、OpenProcess错误40、错误:constchar[19]”转换为“LPCWSTR”附录:36、全屏秒…

opencv的相机校准和3D建模的理论知识

一、相机标定的四个坐标系 1、世界坐标系(Xw,Yw,Zw):也称真实或现实世界坐标系,或全局坐标系。它是客观世界的绝对坐标,由用户任意定义的三维空间坐标系。一般的3D场景都用这个坐标系来表示。 …

SSM框架使用多数据源(druid连接池)

最近有个数据归集的需求用到了多数据源,在业务库保存后同时向归集库插入或数据。之前好像还没做过这块的东西,简单记录下防止下次又忘记了~ 踩过的几个坑都是某些知识点不熟悉导致的,而且都是框架配置相关的.. 先上代码,再扯淡 …

PyQt5 拖拽与剪贴板

拖拽与剪切板拖拽剪贴板拖拽 基于MIME类型的拖拽数据传输时基于QDrag类的QMimeData对象管理的数据与其对应的MIME类型相关联。 MimeData类函数允许检测和使用方法的MIME类型 判断函数设置函数获取函数MIME类型hasText()text()setText()text/plainhasHtml()html()setHtml()tex…

【Java八股文总结】之SpringBoot

文章目录SpringBoot1、Spring Boot的优点?2、Spring Boot自动配置原理3、如何定义一个SpringBoot Starter?4、SpringBoot启动原理?5、SpringBoot的常用注解Spring Cache1、Spring Cache介绍2、Spring Cache注解Sharding-JDBCSpringBoot 1、S…

关于vector的迭代器失效

目录 关于迭代器失效的判定 1 迭代器指向的位置是野指针(全部迭代器失效) 原因: 解决 2 erase或者insert之后迭代器被更改了(部分迭代器失效) 原因 迭代器失效的场景: 改进之后 部分迭代器失效之越…

十年前的AlexNet,今天的NeurIPS 2022时间检验奖

目录:十年前的AlexNet,今天的NeurIPS 2022时间检验奖一、前言二、时间检验奖一、前言 作为当前全球最负盛名的 AI 学术会议之一,NeurIPS 是每年学界的重要事件,通常在每年 12 月举办。大会讨论的内容包含深度学习、计算机视觉、大…

三款“非主流”日志查询分析产品初探

前言 近些年在开源领域,用于构建日志系统的软件有两类典型: Elasticsearch:基于 Lucene 构建倒排索引提供搜索功能,DocValue 存储支持了其统计分析能力。Clickhouse:列式存储是其优秀 OLAP 性能的保障。 这里把上述系…

Windows安装MySQL

目录 1、确认本地是否安装了mysql 2、下载安装包 3、安装mysql 4、修改mysql密码 5、配置环境变量 1、确认本地是否安装了mysql (1)按【winr】快捷键打开运行,输入services.msc,点击【确定】; (2&…

大数据开发和软件开发哪个前景好?

大数据开发和软件开发哪个前景好?大数据开发学习有难度,零基础入门要先学习Java语言打基础,然后进入大数据技术体系的学习,学习Hadoop、Spark、Storm等知识。软件开发工程师根据不同的学科从事的岗位也千差万别。 先说说大数据开…

关于激光雷达传感器分类及简介

关于激光雷达传感器(根据特性进行分类介绍)0一些激光雷达的厂商总结1 基本介绍2 基本分类及组成2.1 激光雷达的相关分类2.1.1 机械式激光雷达:2.1.2 混合固态激光雷达:2.1.3 固态激光雷达:OPA和Flash固态激光雷达2.2 机…