- GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
- GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
- 作者介绍:孙黎,GreatDB 认证DBA
问题现象描述
测试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 过程,技术要求门槛较高。
有没有一个工具,能让运维人员直观地观测一下呢?
当然有!
sysdig这是笔者在GreatSQL社区了解到的一款观测性神器。
在MySQL执行
insert into test.t values(1,'aa');
追踪如下:
1 sysdig proc.pid=2617 and fd.type=file
2 273983 01:02:18.534336211 1 mysqld (

本文通过一个实际现象,即MySQL8.0中ib_logfile文件的改动,探讨了InnoDB事务日志的工作原理。作者通过sysdig工具追踪了一个插入事务,发现log_writer_thread和log_checkpointer_thread两个后台线程分别负责写入redo日志和更新checkpoint。内容涉及到InnoDB的redo日志循环写入、checkpoint机制以及相关参数。文章强调了理论结合实践的重要性,并介绍了GreatSQL这一观测性工具。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



