什么?MySQL 8.0 会同时修改两个ib_logfilesN 文件?

本文详细描述了MySQL 8.0在执行事务时如何同时修改两个ib_logfilesN文件的现象,通过重现问题、追踪分析和理论依据,揭示了MySQL 8.0的redo日志写入机制,并介绍了观测这一过程的工具。
摘要由CSDN通过智能技术生成

问题现象描述

测试MySQL单机时,无意发现,MySQL 8.0的 ib_logfilesN的显示如下:

ll ib_logfile*
-rw-r----- 1 greatsql greatsql 134217728 8月 4 18:36 ib_logfile0
-rw-r----- 1 greatsql greatsql 134217728 7月 27 17:31 ib_logfile1
-rw-r----- 1 greatsql greatsql 134217728 8月 4 18:03 ib_logfile2
-rw-r----- 1 greatsql greatsql 134217728 8月 4 18:36 ib_logfile3

其中 ib_logfile0、iblogfile3 的 最近改动时间为:2022-08-04 18:36

印象中,MySQL 8.0对 redo 做了大量优化,难道刷盘也做了改变?

重现现象

赶紧登录到MySQL 重新执行一条insert,再观察一下。

1  ib_logfile*
2 -rw-r----- 1 greatsql greatsql 134217728 8月   9 22:55 ib_logfile0
3 -rw-r----- 1 greatsql greatsql 134217728 7月  27 17:31 ib_logfile1
4 -rw-r----- 1 greatsql greatsql 134217728 8月   4 18:03 ib_logfile2
5 -rw-r----- 1 greatsql greatsql 134217728 8月   9 22:55 ib_logfile3
6 [#3#root@greatsql82 /data/mysql8023/data 22:55:45]3 stat  ib_logfile0
7 文件:"ib_logfile0"`
8 大小:134217728       块:262144     IO 块:4096   普通文件
9 设备:fd00h/64768d      Inode:75740704    硬链接:1
10 权限:(0640/-rw-r-----)  Uid:( 1000/ greatsql)   Gid:( 1000/ greatsql)
11 最近访问:2022-08-04 19:22:32.746184752 +0800
12 最近更改:2022-08-09 22:55:40.166964294 +0800
13 最近改动:2022-08-09 22:55:40.166964294 +0800
14 创建时间:-`
15 [#4#root@greatsql82 /data/mysql8023/data 22:56:13]4 stat  ib_logfile3
16 文件:"ib_logfile3"
17 大小:134217728       块:262144     IO 块:4096   普通文件
18 设备:*******       Inode:75740707    硬链接:1
19 权限:(0640/-rw-r-----)  Uid:( 1000/ greatsql)   Gid:( 1000/ greatsql)
20 最近访问:2022-08-04 19:22:48.510210526 +0800
21 最近更改:2022-08-09 22:55:39.741963331 +0800
22 最近改动:2022-08-09 22:55:39.741963331 +0800
23 创建时间:-

在MySQL端执行一个事务后,可以看到 ib_logfile0、iblogfile3 都发生了改变, iblogfile3 先改变, iblogfile0 后改变,且改动时间相差不到 0.42s

赶紧翻一下官网手册

By default, the redo log is physically represented on disk by two files named ib_logfile0 and ib_logfile1. MySQL writes to the redo log files in a circular fashion.

没有新变化,依旧是循环写 (那为啥写了iblogfile3后,还会写iblogfile0呢?)

实践追踪

最直接的当然是去看源码,一切尽在源码中。不过看代码实在太麻烦,不太适合大多数的人,gdb debug 过程,技术要求门槛较高。

有没有一个工具&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值