MySQL 8.0 InnoDB 架构之 日志缓冲区(Log Buffer)和重做日志(Redo Log)

文章目录

  • MySQL 8.0 InnoDB 架构之 日志缓冲区(Log Buffer)和重做日志(Redo Log)
    • REDO相关主要参数
      • innodb_log_buffer_size
    • innodb_redo_log_capacity
    • innodb_log_group_home_dir
    • 参考

【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。
编辑|SQL和数据库技术(ID:SQLplusDB)

MySQL 8.0 OCP (1Z0-908) 考点概要

MySQL 8.0 OCP (1Z0-908) 考点精析-安装与配置考点1:设置系统变量
【MySQL】控制MySQL优化器行为方法之optimizer_switch系统变量
【MySQL】MySQL系统变量(system variables)列表(mysqld --verbose --help的结果例)
【MySQL】MySQL系统变量(system variables)列表(SHOW VARIABLES 的结果例)
MySQL 8.0 OCP (1Z0-908) 考点精析-备份与恢复考点1:MySQL Enterprise Backup概要
MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点1:sys.statement_analysis视图
MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点2:系统变量的确认
MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点3:EXPLAIN ANALYZE
MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点4:慢速查询日志(slow query log)
MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点5:表连接算法(join algorithm)
MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6:MySQL Enterprise Monitor之Query Analyzer
MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)
MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点5:数据字典(Data Dictionary)
MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6:InnoDB Tablespaces之系统表空间(System Tablespace)
MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces(单独表空间)
MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)
【MySQL】在数据目录之外创建InnoDB 表(Creating Tables Externally)
MySQL 8.0 InnoDB Tablespaces之Temporary Tablespaces(临时表空间)

MySQL 8.0 InnoDB 架构之 日志缓冲区(Log Buffer)和重做日志(Redo Log)

在这里插入图片描述

和Oracle的架构非常类似,MySQL InnoDB 引擎也有日志缓冲区(Log Buffer)和重做日志(Redo Log)。

  • 日志缓冲区(Log Buffer)是一个内存区域,用于保存要写入磁盘上的重做日志文件的数据。
  • 重做日志文件(Redo Log)是保存在磁盘上的文件,用于保证事务的持久性。例如在数据库崩溃时候,利用重做日志(Redo Log)进行重做和数据恢复。

MySQL InnoDB 进行delete/update/insert更改数据时,在写入数据文件之前,首先会写Redo,这样既可以优化写数据时的I/O,又可以保证例如突然断电或者数据库崩溃恢复时的事务一致性。

※注:
对于MySQL而言,二进制日志文件(Binary log)也可以用于数据恢复操作,关于二进制日志文件可以参考如下内容。
参考:
MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)

REDO相关主要参数

REDO相关主要参数

innodb_log_buffer_size

innodb_log_buffer_size用于定义日志缓冲区的大小,默认大小为16MB。

例:

Command-Line Format–innodb-log-buffer-size=#
System Variableinnodb_log_buffer_size
ScopeGlobal
DynamicYes
SET_VAR Hint AppliesNo
TypeInteger
Default Value16777216
Minimum Value1048576
Maximum Value4294967295

例:

mysql> show variables like 'innodb_log_buffer_size';
+------------------------+----------+
| Variable_name          | Value    |
+------------------------+----------+
| innodb_log_buffer_size | 16777216 |
+------------------------+----------+
1 row in set (0.00 sec)

为了持久化Redo信息,MySQL日志缓冲区的内容会定期刷到磁盘上的重做日志中。
较大的日志缓冲区可以使大型事务在提交之前无需将重做日志数据写入磁盘。因此,如果有更新、插入或删除大量行的事务,增加日志缓冲区的大小可以有效地节省磁盘I/O。

innodb_redo_log_capacity

innodb_redo_log_capacity用于控制重做日志文件占用的磁盘空间量,默认大小为100MB,最大值为为128GB。
※从MySQL 8.0.30开始,innodb_redo_log_capacity取代了已弃用的innodb_log_files_in_group和innodb_log_file_size变量,并且会维持32个Redo文件。

Command-Line Format–innodb-redo-log-capacity=#
Introduced8.0.30
System Variableinnodb_redo_log_capacity
ScopeGlobal
DynamicYes
SET_VAR Hint AppliesNo
TypeInteger
Default Value104857600
Minimum Value8388608
Maximum Value137438953472
Unitbytes

例:

mysql>  show variables like 'innodb_redo_log_capacity';
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_redo_log_capacity | 104857600 |
+--------------------------+-----------+
1 row in set (0.00 sec)

innodb_log_group_home_dir

innodb_log_group_home_dir 用于定义InnoDB日志文件文件的目录路径。
默认情况想,重做日志文件位于数据目录中的#innodb_redo目录中。
例:

mysql> show variables like 'innodb_log_group_home_dir';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_log_group_home_dir | ./    |
+---------------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)mysql> SELECT FILE_NAME, START_LSN, END_LSN FROM performance_schema.innodb_redo_log_files;
+----------------------------+-----------+-----------+
| FILE_NAME                  | START_LSN | END_LSN   |
+----------------------------+-----------+-----------+
| ./#innodb_redo/#ib_redo148 | 484671488 | 487946240 |
+----------------------------+-----------+-----------+
1 row in set (0.02 sec)mysql>

磁盘上的数据文件

root@mysql-vm:/var/lib/mysql/#innodb_redo# ls -lrh
total 100M
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo179_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo178_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo177_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo176_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo175_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo174_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo173_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo172_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo171_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo170_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo169_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo168_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo167_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo166_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo165_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo164_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo163_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo162_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo161_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo160_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo159_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo158_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo157_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo156_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo155_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo154_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo153_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo152_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo151_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo150_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 28 11:28 '#ib_redo149_tmp'
-rw-r----- 1 mysql mysql 3.2M Dec 30 00:00 '#ib_redo148'
root@mysql-vm:/var/lib/mysql/#innodb_redo#

※为了避免潜在的I/O资源冲突,应将InnoDB重做日志文件放置在与InnoDB数据文件不同的物理存储位置。

参考

15.6.5 Redo Log
https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log-buffer.html

8.5.4 Optimizing InnoDB Redo Logging
https://dev.mysql.com/doc/refman/8.0/en/optimizing-innodb-logging.html

Memory Configuration
https://dev.mysql.com/doc/refman/8.0/en/innodb-init-startup-configuration.html#innodb-startup-memory-configuration

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

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

相关文章

web前端(html)练习

第一题 1. 用户名为文本框,名称为 UserName,长度为 15,最大字符数为 20。 2. 密码为密码框,名称为 UserPass,长度为 15,最大字符数为 20。 3. 性别为两个单选按钮,名称为 sex,值分…

链表--141.环形链表/easy C级理解

141.环形链表 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链…

750ml离心瓶进口国产离心机通用750ml离心杯高低速离心机瓶

750ml低速离心瓶系列: 产品货号:ZY1136222 材质:PPCO 容量(ml):750 尺寸(O.DxH,mm):98.5x147 最大离心力(xg):6000 产品货号&…

CloudCompare——点云空间圆拟合

目录 1.概述2.软件实现3.完整操作4.相关代码 本文由CSDN点云侠原创,CloudCompare——点云空间圆拟合,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 CloudCompare软件中的Tools——>…

【DevOps-07-2】Sonarqube基本使用

一、简要说明 Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果 Sonarqube集成在Maven实现代码检测使用sonar-scanner客户端的方式二、Sonarqube管理后台安装中文插件 1、登录Sonarqube管理后台 示例:http://192.168.95…

Python+requests搭建接口自动化测试框架

一、接口自动化的意义(为什么做这个框架) 新版本上线时之前版本的功能需要进行回归测试,导致大量的重复性手工测试。引入自动化测试可以使用自动化技术代替部分手工的回归性测试,解放更多人力做其它更有必要的事情。但目前项目UI变…

RDD算子——转换操作(Transformations )【map、flatMap、reduceByKey】

一、map map 算子 # spark-shell sc.parallelize(Seq(1, 2, 3)).map( num > num * 10).collect()# IDEA Test def mapTest(): Unit {// 1. 创建RDDval rdd1 sc.parallelize(Seq(1, 2, 3))// 2. 执行 map 操作val rdd2 rdd1.map(item > item * 10)// 3. 得到结果val re…

【基础工具篇使用】ADB 的安装和使用

文章目录 ADB的命令安装ADB 命令使用查看帮助 ——adb help查看连接设备 ADB的命令安装 ADB 命令的全称为“Android Debug Bridge”,从英文中看出主要是用作安卓的调试工具。ADB 命令在嵌入式开发中越来越常用了 在 Windows 上按“win”“R”组合件打开运行, 输入 …

astadmin安装querylist插件Puppeteer

我本来是想在linux服务器上安装,折腾了一天也没安装成功,由于急着用,就先做window10上安装了,以后有时间再研究centos7上安装 一 首先需要安装fastadmin 框架和querylist插件 这个大家可以自行安装,querylist安装地址…

LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理

目录 问题描述上代码测试代码各位看官,打赏个1元吧 Json数据格式是大家在游戏开中常量用的一种数据格式,某种程度上可以说是必备的。对unity开发来说,LitJson这个json库应该是被使用最多的json库了。 问题描述 今天说要的其中的这个api: Jso…

Arcgis像元统计数据

目录 单幅影像统计多幅影像统计 单幅影像统计 现有一幅NDVI影像,如何知道影像中NDVI的分布情况呢? 先栅格转点,然后在属性表中查看汇总情况 还有一种方法就是在ENVI中打开, -0.3-0.338占据了99% 多幅影像统计 现有多幅NDVI影…

用css给宽高不固定的矩形画对角线

.kong{width: 200rpx;height: 76rpx;background: linear-gradient(to bottom right, #E5E5E5 0%, rgba(0, 0, 0, 0.1) calc(50% - 1px),#175CFF 50%, rgba(0, 0, 0, 0.1) calc(50% 1px),rgba(0, 0, 0, 0.1) 100%);}参考: https://blog.csdn.net/weixin_38779534/a…

Qt实现简单的分割窗口

最近在学习一些关于Qt的新知识,今天来讲述下我学习到的窗口分割,如果有不正确的,大家可以指正哦~ 首先,先看一下实现之后的简单效果吧!省的说的天花乱坠,大家却不知道说的是哪个部分。 功能实现 整体demo…

【算法与数据结构】70、LeetCode爬楼梯

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:   程序如下: 复杂度分析: 时间复杂度: O ( ) O() O()。空间复…

第四站:C/C++基础-指针

目录 为什么使用指针 函数的值传递,无法通过调用函数,来修改函数的实参 被调用函数需要提供更多的“返回值”给调用函数 减少值传递时带来的额外开销,提高代码执行效率 使用指针前: 使用指针后: 指针的定义: 指针的含义(进阶): 空指针…

Android 正圆

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&…

x-cmd pkg | gh - GitHub 官方 CLI

目录 简介首次用户功能特点与 x-cmd gh 模块的关系相关作品进一步探索 简介 gh&#xff0c;是由 GitHub 官方使用 Go 语言开发和维护的命令行工具&#xff0c;旨在脚本或是命令行中便捷管理和操作 GitHub 的工作流程。 注意: 由于 x-cmd 提供了同名模块&#xff0c;因此使用官…

Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻直播带货及 免 费 小程序商城搭建的完整指南

随着互联网的快速发展&#xff0c;越来越多的企业开始注重数字化转型&#xff0c;以提升自身的竞争力和运营效率。在这个背景下&#xff0c;鸿鹄云商SAAS云产品应运而生&#xff0c;为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的软…

OpenFeign服务调用

一、Feign Feign 是一个声明式webservice客户端,使用Feign 能让编写Web Service客户端更简单 &#xff0c;它的使用方法是 定义一个服务接口然后在上面添加注解。Spring Cloud对Feign 进行了封装&#xff0c;使其支持了Spring Mvc 标准注解和HttpMessageConverters ,Fegin可以…

【Python】 python简介开发环境

1. python简介 Python是由荷兰人吉多范罗苏姆 (Guido von Rossum&#xff0c;后面称呼为Guido,"龟叔“)发明的一种编程语言&#xff0c;是目前世界上最受欢迎和拥有最多用户群体的编程语言。 (1).Python的历史 1.1989年圣诞节:Guido开始写Python语言的编译器。 2.1991年…