MySQL innodb引擎架构分析-Redo log

news2024/9/24 11:27:08

文章目录

  • 系列文章目录
  • 前言
  • 一、Redo log是什么?
  • 二、Redo log是怎么工作的
    • Redo log的组成
    • Redo log的配置
    • Redo log何时刷盘
  • 总结

系列文章目录


1. MySQL innodb引擎架构分析-Buffer Pool
2. MySQL innodb引擎架构分析-Redo log


前言

在MySQL的事物处理过程中,数据库要保证事务的特性(关于数据库事务特性,可以参看我的这篇博文数据库的事务管理与三级封锁协议),其中要实现事务持久性的特点,在事务发生时,实时改变磁盘上的数据是最容易实现的,但这样实现存在以下几个问题:

  1. 因为 Innodb 是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了。
  2. 一个事务可能涉及修改多个数据页,并且这些数据页在物理上并不连续,使用随机 IO 写入性能太差。
  3. 一个事务并不是百分百提交的,也可能回滚,如果在执行完随机IO后不是提交事务而是回滚,白白浪费了磁盘IO,每次随机IO可能包含磁盘寻面、寻道、查扇区的过程,如果开辟一个磁盘空间,使其物理地址是连续的,把每次的记录都记录在这个区域,这样每次磁盘只在前一个数据后面追加就可以了,减少了磁盘寻面、寻道的次数,只在一个个连续的扇区写入数据即可。磁盘IO是非常宝贵的资源,不能轻易浪费。

因此 MySQL 设计了 Redo log ,具体来说就是只记录事务对数据页做了哪些修改,这样就能完美地解决性能问题了,而相对而言Redo log所存在的区域是一个磁盘物理空间连续的,是一个顺序IO。

一、Redo log是什么?

Redo log是InnoDB引擎特有的。记录着事务里对数据的修改。在mysql中,如果修改了数据,那么事务提交前,首先会被记录成redo log日志写入磁盘,等到事务提交时,再把新数据写入磁盘。
在这里插入图片描述

二、Redo log是怎么工作的

Redo log的组成

Redo log 包括两部分:一个是内存中的日志缓冲(Redo log buffer),另一个是磁盘上的日志文件(Redo log file)。MySQL 每执行一条 语句,先将记录写入 Redo log buffer ,后续某个时间点再一次性将多个操作记录写到 Redo log file 。
Redo log记录物理日志,记录的是“在某个数据页上做了什么修改”,例如下面的语句 :
update table set a = 1 where id = 1;
那么翻译成物理日志类似于这样 :
把第10表空间的第90号页面的偏移量为1024处的值更新为1
下面是大部分类型的redo log的通用结构:
在这里插入图片描述

  • type:redo log的类型,目前redo log的类型很多
    MLOG_1BYTE:type字段对应的十进制为1,表示在页面的某个偏移量处写入一个字节
    MLOG_2BYTES:type字段对应的十进制为2,表示在页面的某个偏移量处写入两个字节
    MLOG_4BYTES:type字段对应的十进制为4,表示在页面的某个偏移量处写入四个字节
    MLOG_8BYTES:type字段对应的十进制为8,表示在页面的某个偏移量处写入八个字节
    MLOG_WRITE_STRING::type字段对应的十进制为30,表示在页面的某个偏移量处写入一串数据
  • Space ID:表空间ID
  • page number:页号
  • data:一条redo log的内容

Redo log的配置

默认情况下,Redo log 在磁盘上由名为 ib_logfile0 和 ib_logfile1 的两个物理文件展示。Redo log 相关参数简单介绍如下:

  • innodb_log_files_in_group:redo log文件的个数,命名方式如:ib_logfile0,iblogfile1… iblogfilen。默认2个,最大100个。
  • innodb_log_file_size:单个 redo log 文件设置大小,默认值为 48M,最大值为512G,注意最大值指的是整个redo log 系列文件之和,即(innodb_log_files_in_group * innodb_log_file_size)不能大于最大值512G。
  • innodb_log_group_home_dir:指定 redo log 文件组所在的路径,默认./ ,表示在数据库的数据目录下。
  • innodb_log_buffer_size:redo log buffer大小,默认16M。延迟事务日志写入磁盘,把 redo log 放到该缓冲区,然后根据innodb_flush_log_at_trx_commit 参数的设置,再把日志从 buffer 中 flush 到磁盘中。
  • innodb_flush_log_at_trx_commit:控制 redo log 刷新到磁盘的策略,默认为1。
    设置为0的时候,表示每次事务提交时不进行刷盘操作,如果是数据库挂掉,会丢失挂掉时到上一次刷盘的记录。
    设置为1的时候,表示每次事务提交时都将进行刷盘操作(默认值)
    设置为2的时候,表示每次事务提交时都只把redo log buffer内容写入操作系统的page cache,如果只是数据可挂掉,操作系统正常,提交的事物是不会丢失的。

Redo log何时刷盘

根据innodb_flush_log_at_trx_commit设置的参数不同,数据库会在以下时机进行Redo log 刷盘:

  1. 后台线程刷。
  2. 脏页太多,innodb存储引擎强制进行Checkpoint。使得部分redo文件可以被重写。当缓冲池不够用时,根据LRU算法会溢出最近最少使用的页,若此页为脏页,那么就需要强制执行checkpiont,将脏页也就是页的新版本刷回磁盘
  3. 事务提交时。脏页可以不写,但是redo log在提交前必须写!
  4. 正常关闭服务器。

总结

更改 redo log 及其 buffer 大小是需要重启数据库实例的,建议初始化时做好评估。可以适当加大 redo log 组数和大小,特别是你的数据库实例更新比较频繁的情况下。但也不推荐 redo log 设置过大。

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

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

相关文章

12 款 yyds 的 IDEA插件,配上18条使用技巧,绝了

工欲善其事,必先利其器。想要提升编程开发效率,必须选择一款顺手的开发工具。 JetBrains 公司提供了一系列功能强大、风格统一的开发工具,深受开发者喜爱。其中,IDEA 是面向 Java 开发的专业 IDE(集成开发环境&#x…

python os.system调用别的系统程序总出现一闪而过的黑框解决办法

python os.system调用别的系统程序总出现一闪而过的黑框解决办法 今天打包了py程序,运行的时候发现老是有个黑框一闪而过。经过多次尝试发现是os.system的问题,调用这个函数会调用cmd,所有会出现短暂的黑框显示。 解决办法1:换用…

HarmonyOS跨端迁移开发代码演示

目录说些废话开源代码环境代码ability_main.xmlconfig.jsonMainAbility.javaMainAbilitySlice.java测试说些废话 官方文档:跨端迁移开发指导(基于java开发)     下面环境里写的两台真机我测试的时候无法正常产生回迁效果,所以…

以太网 DHCP(DHCP的8种报文、DHCP配置、DHCP中继)

2.13.1 以太网 DHCP(DHCP的8种报文、DHCP配置、DHCP中继) DHCP-22.13.1 以太网 DHCP(DHCP的8种报文、DHCP配置、DHCP中继)一、DHCP的8种报文二、DHCP配置接口配置:全局配置:三、DHCP中继配置案例&#xff1…

游戏开发52课 渲染路径

4.6 渲染路径(Rendering Path) 4.6.1 经典顶点光(Legacy Vertex Lit) 严格来说,它也是前向渲染的一种,但有些引擎(如Unity)将它单独抽离出来。由于光照计算在顶点,所以…

微服务架构系列(一)之虚拟平台、分布式存储、高可用k8s集群环境搭建

一、物理机虚拟平台搭建 1、由实向需架构转换图(每台物理机要求两块硬盘用来做分布式存储和系统盘,我的是10年前的老机器没啥大的要求): 2、系统安装去官网下载 Proxmox VE 7.x ISO Installer (按需求选择版本&#x…

sublime text 4的安装/配置中文/更换配色方案

效果 安装 参考文章:Sublime Text v4.0(4143)安装方法 Sublime Text v4.0(4143)下载地址:https://www.sublimetext.com/download_thanks?targetwin-x64 安装软件找到软件安装位置,找到sublime_text.exe将sublime_text.exe 拖入16进制编辑…

[附源码]计算机毕业设计基于协同过滤的资讯推送平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

安卓玩机搞机技巧综合资源-----手机蝰蛇音效 杜比安装步骤 多种方式【九】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

编程小白想转行互联网,想以python为入口,究竟可不可行?

前言 最近有些朋友私信过我这个问题,很多编程小白想从事或转行互联网,想以Python为切入口,究竟可不可行? 以我看到的一些小伙伴的学习经历来说,虽说学会Python不能够马上胜任一些工作,但这可能是你离互联…

一例Trickbot家族js下载器的分析

样本信息 MD5: e36380d824811bc28fbc26ea84c1a868 SHA1: 19d5fc16cfabae3b3c26bbb4f5798da42733a2fa SHA256: 16429e95922c9521f7a40fa8f4c866444a060122448b243444dd2358a96a344c SHA512: 6c6f323893870536822a2aa2aebe783379906081fcf004dd04cb40cc1109c3452d39b548ac8b2a654…

安卓APP源码和设计报告——导航系统

演示答辩发言稿&#xff1a; 注意&#xff1a;1.在mainfest.xml文档中添加访问权限即一系列<uses-permission>元素使用Android中提供的权限。比如百度地图的使用联网的情况下需要网络功能权限。 2.在Stings.xml中添加一些字符串数组&#xff0c;离线数据管理、简体繁体…

python---数据容器

目录 环境安装 python语法 打印语句 注释 变量 变量声明 变量类型 boolean类型 占位符 控制数据精度 输入输出 条件控制 循环语句 while循环 for循环 函数 None类型 数据容器 列表 元组 字符串 序列 集合 字典 环境安装 1、安装python运行环境 Welcome t…

swiftui 中的app和 Scenes有什么,他们是什么关系

app和 Scenes有什么,他们是什么关系 SwiftUI 中的 app 和 Scenes 是两个相关的概念,它们都与应用程序的用户界面有关。 app 是指使用 SwiftUI 框架开发的应用程序,它包含了用户界面的所有内容和逻辑。在 SwiftUI 中,app 的界面通常由多个视图组成,每个视图都可以显示不同…

使用声网 SDK 构建 Piloteer 助盲服务平台的最佳实践

前言 在今年声网主办的「RTE2022 编程挑战赛」中&#xff0c;数支队伍经过一个多月的努力开发&#xff0c;很多优秀的作品最终突出重围&#xff0c;斩获大奖。本文由RTE2022编程挑战赛获奖者之一李新春撰写&#xff0c;他主要围绕获奖作品「Piloteer助盲服务平台」分享了开发的…

用HarmonyOS ArkUI实现点赞美女翻牌动效

本文演示如果用HarmonyOS的ArkUI来实现一个点赞的动画效果。体验HarmonyOS 3最新的API 9&#xff0c;欢迎大家一起参与构建这个万物互联的时代&#xff01; 活动主页 HarmonyOS线上Codelabs挑战赛已经开启&#xff0c;该系列挑战赛将围绕HarmonyOS的基础组件和容器组件、三方…

用Clash解决Python安装模块慢的问题

已经开了代理了&#xff0c;但如果没有使用全局模式的话&#xff0c;Python模块下载速度依然非常慢&#xff0c;只有几十K。使用全局模式是可以解决这个问题&#xff0c;但同时访问国内的一些网站又会速度特别慢&#xff0c;甚至打不开。 比如我们亲爱的知乎就会显示&#xff…

Vue项目初始化

1.创建脚手架&#xff1a; cmd控制台切换到指定的目录命令&#xff1a; vue create 项目名 然后cd到项目里运行&#xff1a; npm run serve 生成目录 2.配置&#xff1a; &#xff08;1&#xff09;关闭eslint 防止定义没用带来的报错 在vue.config.js中&#xff1a; 配置&…

Codeforces Global Round 19 D. Yet Another Minimization Problem

翻译&#xff1a; 给定两个数组&#x1d44e;和&#x1d44f;&#xff0c;长度都为&#x1d45b;。 选择索引&#x1d456;(1≤&#x1d456;≤&#x1d45b;)&#xff0c;将&#x1d44e;&#x1d456;和&#x1d44f;&#x1d456;交换。 让我们来定义数组的成本&#x1d…

Java连接SQL Server数据库的详细操作流程

Java连接SQL Server数据库的详细操作流程 一.明确JDK版本和下载驱动 1.1 JDK版本查看 win r输入cmd,命令窗口输入java --version 1.2 SQL Server官网下载驱动 SQL Server驱动下载直达地址 下载完成后解压到自己熟悉的目录&#xff0c;不出意外的话你会看到以下文件 1.3 …