深入MySQL--浅析MySQL Redo Log落盘机制

在MySQL事务执行的过程中,innodb引擎会产生redo log,我们知道,MySQL的事务提交是两阶段提交的,画图如下:

aaaaacccc.png

通常来讲,redo log刷盘的时机是在事务提交的commit阶段采取刷盘的,在此之前,redo log都存在于redo log buffer这块指定的内存区域中。

这里我们首先要明确两个概念和两个参数:

write:刷盘

fsync:持久化到磁盘


write(刷盘)指的是MySQL从buffer pool中将内容写到系统的page cache中,并没有持久化到系统磁盘上。这个速度其实是很快的。

fsync指的是从系统的cache中将数据持久化到系统磁盘上。这个速度可以认为比较慢,而且也是IOPS升高的真正原因。

参数:

innodb_flush_logs_at_trx_commit(该参数针对redo log)

取值0:每次提交事务都只把redo log留在redo log buffer中

取值1:每次提交事务都将redo log 持久化到磁盘上,也就是write+fsync

取值2:每次都把redo log写到系统的page cache中,也就是只write,不fsync


sync_binlog
(改参数针对binlog)

取值0:每次提交都将binlog 从binlog cache中 write到磁盘上,而不fsync到磁盘

取值1:每次提交事务都将binlog fsync到磁盘上

取值N:每次提交事务都将binlog write到磁盘上,累计N个事务之后,执行fsync


但是,在某些特定场景下,redo log会在commit这个动作到来之前进行刷盘操作,例如下面的两种情况会让没有提交的事务的redo log写入磁盘:
游客,如果您要查看本帖隐藏内容请回复
标签: 暂无标签
lee

写了 75 篇文章,拥有财富 290,被 8 人关注

转播转播 分享分享 分享聚知识
回复

使用道具

lee
技术顾问 | 发表于 2020-9-10 21:23:56
catman 发表于 2020-9-9 22:25
请问GTID是和异步、半同步,同一级别的不同同步方式么? 性质有没有偏向哪一方,同步速度更接近于异步还是 ...

异步和半同步是一类的.用于描述主从复制的机制的区别.
GTID和上面的异步和半同步不是同一类的概念.

GTID出现的目的最主要的作用就是取代传统的file+pos定位事务的.

不在同一个维度讨论
回复

使用道具

P3 | 发表于 2020-9-9 22:12:19
前来学习
回复

使用道具

P3 | 发表于 2020-9-9 22:25:22
请问GTID是和异步、半同步,同一级别的不同同步方式么? 性质有没有偏向哪一方,同步速度更接近于异步还是更接近半同步?

点评

lee
异步和半同步是一类的.用于描述主从复制的机制的区别. GTID和上面的异步和半同步不是同一类的概念. GTID出现的目的最主要的作用就是取代传统的file+pos定位事务的. 不在同一个维度讨论  详情 回复 发表于 2020-9-10 21:23
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈