MySQL 8.0.32 双写参数和innodb_redo

news2025/1/14 12:17:16

版本为mysql 8.0.32

数据库内存和磁盘架构

image-20240105135728143

#ib_16384_0.dblwr

#ib_16384_0.dblwr和#ib_16384_2.dblwr 这两个文件有什么区别

从架构图中,不难看出这两个文件是双写buffer文件。

双写缓冲区是一个存储区域,在 InnoDB将页面写入 InnoDB数据文件中的正确位置之前,先将页面写入从缓冲池刷新的位置。 如果在页面写入过程中 存在操作系统、存储子系统或意外的mysqldInnoDB进程退出,则可以在崩溃恢复期间从双写缓冲区中找到该页面的良好副本。
​
虽然数据被写入两次,但双写缓冲区不需要两倍的 I/O 开销或两倍的 I/O 操作。fsync()通过对操作系统的一次调用 ,将数据以大的顺序块写入双写缓冲区(innodb_flush_method设置为 的 情况除外O_DIRECT_NO_FSYNC)。
​
MySQL 8.0.20之前,双写缓冲区存储区域位于InnoDB系统表空间中。从MySQL 8.0.20开始,双写缓冲区存储区域位于双写文件中。
​
为双写缓冲区配置提供以下变量:
​
innodb_doublewrite
​
该innodb_doublewrite 变量控制是否启用双写缓冲区。大多数情况下它是默认启用的。要禁用双写缓冲区,请设置 innodb_doublewrite为 OFF。如果您更关心性能而不是数据完整性(例如,执行基准测试时可能会出现这种情况),请考虑禁用双写缓冲区。
​
从MySQL 8.0.30开始, innodb_doublewrite支持 DETECT_AND_RECOVER和 DETECT_ONLY设置。
​
设置DETECT_AND_RECOVER与设置相同ON。通过此设置,双写缓冲区将完全启用,数据库页面内容将写入双写缓冲区,在恢复期间访问该缓冲区以修复不完整的页面写入。
​
通过该DETECT_ONLY设置,只有元数据会写入双写缓冲区。数据库页内容不会写入双写缓冲区,并且恢复不会使用双写缓冲区来修复不完整的页写入。此轻量级设置仅用于检测不完整的页面写入。
​
MySQL 8.0.30 及以上版本支持 在、和innodb_doublewrite之间动态更改启用双写缓冲区的设置 。MySQL 不支持启用双写缓冲区的设置之间的动态更改,反之亦然。 ONDETECT_AND_RECOVERDETECT_ONLYOFF
​
如果双写缓冲区位于支持原子写入的 Fusion-io 设备上,则会自动禁用双写缓冲区,并使用 Fusion-io 原子写入来执行数据文件写入。但是,请注意该innodb_doublewrite 设置是全局的。当双写缓冲区被禁用时,所有数据文件(包括那些不驻留在 Fusion-io 硬件上的数据文件)都会被禁用。此功能仅在 Fusion-io 硬件上受支持,并且仅针对 Linux 上的 Fusion-io NVMFS 启用。要充分利用此功能, 建议 innodb_flush_method设置为。O_DIRECT
​
innodb_doublewrite_dir
​
该innodb_doublewrite_dir 变量(在 MySQL 8.0.20 中引入)定义创建双写文件的目录InnoDB。如果未指定目录,则会在该innodb_data_home_dir 目录中创建双写文件,如果未指定,则默认为数据目录。
​
哈希符号“#”会自动作为指定目录名称的前缀,以避免与架构名称发生冲突。但是,如果有“.”、“#”。或“/”前缀在目录名称中显式指定,哈希符号“#”不作为目录名称的前缀。
​
理想情况下,双写目录应放置在最快的可用存储介质上。

#innodb_redo

从 MySQL 8.0.30 开始, innodb_redo_log_capacity系统变量控制重做日志文件占用的磁盘空间量。您可以在启动时或在运行时使用语句在选项文件中设置此变量 SET GLOBAL;例如,以下语句将重做日志容量设置为8GB:
​
SET GLOBAL innodb_redo_log_capacity = 8589934592;
在运行时设置时,配置更改会立即发生,但可能需要一些时间才能完全实施新的限制。如果重做日志文件占用的空间小于指定值,则脏页会不太积极地从缓冲池刷新到表空间数据文件,最终会增加重做日志文件占用的磁盘空间。如果重做日志文件占用的空间超过指定值,则会更积极地刷新脏页,最终减少重做日志文件占用的磁盘空间。
​
该innodb_redo_log_capacity 变量取代了 innodb_log_files_in_group和 innodb_log_file_size变量,后者已被弃用。当 innodb_redo_log_capacity设置被定义时,innodb_log_files_in_group和 innodb_log_file_size设置被忽略;否则,这些设置用于计算 innodb_redo_log_capacity 设置 ( innodb_log_files_in_group* innodb_log_file_size= innodb_redo_log_capacity)。如果未设置这些变量,则重做日志容量将设置为 innodb_redo_log_capacity默认值,即 104857600 字节 (100MB)。最大重做日志容量为128GB。
​
#innodb_redo 除非变量指定了不同的目录,否则 重做日志文件驻留在数据目录中的目录中innodb_log_group_home_dir 。如果 innodb_log_group_home_dir已定义,则重做日志文件驻留在 #innodb_redo该目录中的目录中。重做日志文件有两种类型:普通重做日志文件和备用重做日志文件。普通重做日志文件是正在使用的文件。备用重做日志文件是那些等待使用的文件。InnoDB 尝试总共维护 32 个重做日志文件,每个文件的大小等于 1/32 * innodb_redo_log_capacity;但是,修改设置后,文件大小可能会暂时有所不同 innodb_redo_log_capacity。
​
重做日志文件使用 命名约定,其中是重做日志文件编号。备用重做日志文件由后缀表示 。以下示例显示 目录中的重做日志文件,其中有 21 个活动重做日志文件和 11 个备用重做日志文件,按顺序编号。 
#ib_redoNN_tmp   # 11 个备用重做日志文件
#innodb_redo     # 21 个活动重做日志文件
​
'#ib_redo582'  '#ib_redo590'  '#ib_redo598'      '#ib_redo606_tmp'
'#ib_redo583'  '#ib_redo591'  '#ib_redo599'      '#ib_redo607_tmp'
'#ib_redo584'  '#ib_redo592'  '#ib_redo600'      '#ib_redo608_tmp'
'#ib_redo585'  '#ib_redo593'  '#ib_redo601'      '#ib_redo609_tmp'
'#ib_redo586'  '#ib_redo594'  '#ib_redo602'      '#ib_redo610_tmp'
'#ib_redo587'  '#ib_redo595'  '#ib_redo603_tmp'  '#ib_redo611_tmp'
'#ib_redo588'  '#ib_redo596'  '#ib_redo604_tmp'  '#ib_redo612_tmp'
'#ib_redo589'  '#ib_redo597'  '#ib_redo605_tmp'  '#ib_redo613_tmp'
每个普通重做日志文件都与特定范围的 LSN 值相关联;例如,以下查询显示 上一示例中列出的活动重做日志文件的 START_LSN和值:END_LSN
​
mysql> SELECT FILE_NAME, START_LSN, END_LSN FROM performance_schema.innodb_redo_log_files;
+----------------------------+--------------+--------------+
| FILE_NAME                  | START_LSN    | END_LSN      |
+----------------------------+--------------+--------------+
| ./#innodb_redo/#ib_redo582 | 117654982144 | 117658256896 |
| ./#innodb_redo/#ib_redo583 | 117658256896 | 117661531648 |
| ./#innodb_redo/#ib_redo584 | 117661531648 | 117664806400 |
| ./#innodb_redo/#ib_redo585 | 117664806400 | 117668081152 |
| ./#innodb_redo/#ib_redo586 | 117668081152 | 117671355904 |
| ./#innodb_redo/#ib_redo587 | 117671355904 | 117674630656 |
| ./#innodb_redo/#ib_redo588 | 117674630656 | 117677905408 |
| ./#innodb_redo/#ib_redo589 | 117677905408 | 117681180160 |
| ./#innodb_redo/#ib_redo590 | 117681180160 | 117684454912 |
| ./#innodb_redo/#ib_redo591 | 117684454912 | 117687729664 |
| ./#innodb_redo/#ib_redo592 | 117687729664 | 117691004416 |
| ./#innodb_redo/#ib_redo593 | 117691004416 | 117694279168 |
| ./#innodb_redo/#ib_redo594 | 117694279168 | 117697553920 |
| ./#innodb_redo/#ib_redo595 | 117697553920 | 117700828672 |
| ./#innodb_redo/#ib_redo596 | 117700828672 | 117704103424 |
| ./#innodb_redo/#ib_redo597 | 117704103424 | 117707378176 |
| ./#innodb_redo/#ib_redo598 | 117707378176 | 117710652928 |
| ./#innodb_redo/#ib_redo599 | 117710652928 | 117713927680 |
| ./#innodb_redo/#ib_redo600 | 117713927680 | 117717202432 |
| ./#innodb_redo/#ib_redo601 | 117717202432 | 117720477184 |
| ./#innodb_redo/#ib_redo602 | 117720477184 | 117723751936 |
+----------------------------+--------------+--------------+
执行检查点时,InnoDB将检查点 LSN 存储在包含该 LSN 的文件的标头中。在恢复期间,将检查所有重做日志文件,并从最新的检查点 LSN 开始恢复。
​
提供了几个状态变量用于监视重做日志和重做日志容量调整操作;例如,您可以查询 Innodb_redo_log_resize_status 以查看调整大小操作的状态:
​
mysql> SHOW STATUS LIKE 'Innodb_redo_log_resize_status';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| Innodb_redo_log_resize_status | OK    |
+-------------------------------+-------+
状态 Innodb_redo_log_capacity_resized 变量显示当前重做日志容量限制:
​
​
mysql> SHOW STATUS LIKE 'Innodb_redo_log_capacity_resized';
 +----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| Innodb_redo_log_capacity_resized | 104857600 |
+----------------------------------+-----------+

#innodb_temp

会话临时表空间

会话临时表空间存储用户创建的临时表和优化器在InnoDB配置为磁盘内部临时表的存储引擎时创建的内部临时表。从 MySQL 8.0.16 开始,磁盘内部临时表使用的存储引擎是InnoDB。(以前,存储引擎是由 的值确定的 internal_tmp_disk_storage_engine。)

会话临时表空间是在第一次请求创建磁盘临时表时从临时表空间池中分配给会话的。一个会话最多分配两个表空间,一个用于用户创建的临时表,另一个用于优化器创建的内部临时表。分配给会话的临时表空间用于该会话创建的所有磁盘上临时表。当会话断开连接时,其临时表空间将被截断并释放回池中。服务器启动时会创建一个包含 10 个临时表空间的池。池的大小永远不会缩小,并且表空间会根据需要自动添加到池中。临时表空间池将在正常关闭或中止初始化时删除。会话临时表空间文件在创建时大小为五页,并具有.ibt文件扩展名。

为会话临时表空间保留了 40 万个空间 ID 的范围。由于每次服务器启动时都会重新创建会话临时表空间池,因此当服务器关闭时,会话临时表空间的空间 ID 不会保留,并且可以重复使用。

该innodb_temp_tablespaces_dir 变量定义创建会话临时表空间的位置。默认位置是 #innodb_temp数据目录中的目录。如果无法创建临时表空间池,则启动将被拒绝。

$> cd BASEDIR/data/#innodb_temp
$> ls
temp_10.ibt  temp_2.ibt  temp_4.ibt  temp_6.ibt  temp_8.ibt
temp_1.ibt   temp_3.ibt  temp_5.ibt  temp_7.ibt  temp_9.ibt

在基于语句的复制 (SBR) 模式中,在副本上创建的临时表驻留在单个会话临时表空间中,该临时表空间仅在 MySQL 服务器关闭时才会被截断。

该INNODB_SESSION_TEMP_TABLESPACES 表提供有关会话临时表空间的元数据。

信息架构 INNODB_TEMP_TABLE_INFO表提供有关实例中活动的用户创建的临时表的元数据InnoDB

innodb_temp_tablespaces_dir

由这个参数进行自定义控制

MySQL :: MySQL 8.0 Reference Manual :: 15.14 InnoDB Startup Options and System Variables

命令行格式--innodb-temp-tablespaces-dir=dir_name
介绍8.0.13
系统变量innodb_temp_tablespaces_dir
范围全球的
动态的
SET_VAR提示适用
类型目录名称
默认值#innodb_temp

InnoDB定义启动时创建会话临时表空间池的 位置。默认位置是#innodb_temp数据目录中的目录。允许使用完全限定路径或相对于数据目录的路径。

从 MySQL 8.0.16 开始,会话临时表空间始终存储用户创建的临时表和优化器使用InnoDB. (以前,内部临时表的磁盘存储引擎是由 internal_tmp_disk_storage_engine 系统变量确定的,现在不再支持。请参阅 磁盘内部临时表的存储引擎。)

以上完毕,

下个内容分享undo-log文件

作者公众号

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

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

相关文章

C#上位机与欧姆龙PLC的通信10----开发专用的通讯工具软件(WPF版)

1、介绍 上节开发了一个winform版的通讯测试工具,这节再搞个wpf版的,wpf是什么?请自行百度,也可以看前面的博客,WPF真入门教程,wpf的界面效果是比winform漂亮,因为wpf使用了web项目中的css样式…

使用qtcreator创建qml项目(图解)

接下来就一直点继续,最后完成项目,如下图。 下面对项目进行一些基本的描述 (1)qt项目文件使用pro后缀,是qt项目的配置文件,它用于指定项目的各种参数,包括源文件、头文件、库依赖、编译选项等&a…

全网唯一值得推荐的C/C++框架和库

全网唯一值得推荐的C/C框架和库 C程序员开发指南 ​ 关注我,天天分享C/C开发技术干货! ​关注他 30 人赞同了该文章 ​ 目录 收起 标准库 C通用框架和库 人工智能 异步事件循环 音频 生态学 压缩 并发性 容器 数据库 调试 游戏引擎 图…

C++程序设计兼谈对象模型(侯捷)笔记

C程序设计兼谈对象模型(侯捷) 这是C面向对象程序设计的续集笔记,仅供个人学习使用。如有侵权,请联系删除。 主要内容:涉及到模板中的类模板、函数模板、成员模板以及模板模板参数,后面包含对象模型中虚函数调用&…

【合阳新起点公益】“关爱留守儿童 守护牙齿健康”牙膏发放活动

为了关爱儿童的口腔健康,帮助他们改善生活状况,养成良好的刷牙习惯。合阳县未成年人保护中心、合阳县新起点公益服务中心组织链接到汕头市惠泽人志愿服务中心,为孩子们申请到一批儿童爱心牙膏套盒,分别于2023年12月22日、12月30日…

基于seatunnel实现mysql同步clickhouse验证

场景: 需求想要实现mysql同步到clickhouse,seatunnel部署见前面文档linux环境seatunnel安装运行-CSDN博客。 官方说明文档 Clickhouse | Apache SeaTunnel mysql同步配置 server-id1 log_bin/var/lib/mysql/bin.log binlog_formatROW #binlog-do-db 具…

必看!干得不能再干了,Abaqus各版本安装指南

Abaqus下载链接 https://pan.baidu.com/s/1PHWhlM4cPINUqy2XYRHrhQ?pwd0531 ​1.鼠标右击【Abaqus2023(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Abaqus.2023(64bit)】。 2.打开解压后的文件夹,鼠标右击【jdk-17…

2024年MySQL学习指南(四),探索MySQL数据库,掌握未来数据管理趋势

文章目录 前言9. 约束的概念10. 约束的分类11. 非空约束12. 唯一约束13. 主键约束14. 默认约束15. 外键约束16. 约束的案例练习 前言 接上篇: 2024年MySQL学习指南(一) 2024年MySQL学习指南(二) 2024年MySQL学习指…

影响机器人行业爆炸式发展的原因有哪些(OpenPilot)

机器人是现在和未来最有发展前景的行业,这一点是毋庸置疑的。 先看一段21年的视频: 外置式L2级别自动驾驶辅助套件 Openpilot 深度体验分析 火热 作为热门专业的从业人员,能够感受到行业的关注热度和实际热度之间的差异。 原因 有很多&am…

操作系统(期末复习知识点)

第1章 操作系统引论 操作系统的目标和作用 操作系统的目标 在计算机系统上配置OS,其主要目的是实现:方便性、有效性、可扩充性、开放性。 操作系统的作用 可以从人机交互、资源管理及资源抽象等不同方面来分析OS在计算机系统中所起到的作用。 OS 作为…

怎么测试电源负载瞬态响应?具体步骤是什么?

负载瞬态响应(Load Transient Response)指的是电路或系统在负载发生瞬态变化时,输出电压或电流出现的瞬时变化的情况。 电源负载瞬态响应测试是评估电源在负载变化时性能表现的一种重要方法。在实际应用中,电源负载的变化是不可避免的,因此准确评估电源的…

面试必问究极重点之HashMap的底层原理

1.底层数据结构 JDK版本不同的数据结构 1.7 数组 链表 1.8 数组 (链表 | 红黑树) 2.添加数据put 在添加一个值的时候,首先会计算他的hash码,然后进行二次hash,在对当前长度取模得到在底层数组中的索引位置当取模完…

用Spring Boot 3.2虚拟线程搭建静态文件服务器有多快?

Spring Boot 3.2 于 2023 年 11 月大张旗鼓地发布,标志着 Java 开发领域的一个关键时刻。这一突破性的版本引入了一系列革命性的功能,包括: 虚拟线程:利用 Project Loom 的虚拟线程释放可扩展性,从而减少资源消耗并增…

【HBase】——优化

1 RowKey设计 重要:一条数据的唯一标识就是 rowkey,那么这条数据存储于哪个分区,取决于 rowkey 处于 哪个一个预分区的区间内,设计 rowkey的主要目的 ,就是让数据均匀的分布于所有的 region 中,在一定程度…

海昌海洋公园用泛微千里聆RPA智能采集、识别、分析网络数据,助力优化运营服务

海昌海洋公园控股有限公司(以下简称“海昌海洋公园”)是中国知名的主题公园和配套商用物业开发及运营商。经过近二十年发展,凭借行业优秀的极地海洋动物保育技术,公司将其业务模式逐步推广到核心城市,展开了海昌海洋公…

2024中国管业十大品牌——皮尔特管业

2024中国管业十大品牌——皮尔特管业 2024年度中国管业十大品牌评选活动圆满举办。来自江苏的皮尔特管道,再次成功入围2024中国管业十大品牌。皮尔特管业凭借多年积累的市场口碑,再次入围也是实至名归。 苏州皮尔特管业科技有限公司创建于2001年&#x…

矩阵翻转180度是什么意思,请举例

问题描述:矩阵翻转180度是什么意思,请举例 问题解答: 矩阵的180度翻转是指将矩阵绕中心水平和垂直翻转。这个操作类似于将图像或矩阵上下颠倒,然后左右颠倒。翻转后的矩阵在水平和垂直方向上保持了原始矩阵的对称性。 让我们以…

【性能测试】老鸟总结,性能测试到底该如何做,一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、前期准备 性能…

2023年第2季社区Task挑战赛贡献者榜单

基于FISCO BCOS及Weldentity,实现SSO单点登录服务;提供食品溯源、电商运费险7天退保、电子病历等智能合约库业务场景案例;基于FISCO BCOS更新游戏体验;体验并分析解读最新发布的分布式数据协作管理解决方案DDCMS,提供相…

Eviews 11安装包下载及安装教程

Eviews 11下载链接:https://docs.qq.com/doc/DUmRGdXVUeVBSU1lK 1.选中下载好的安装包,右键解压到“Eviews 11”文件夹 2.选中"Setup.exe"鼠标右键选择以管理员身份运行 3.点击“Next” 4.勾选“I Accept...”,点击“Next” 5.选择…