返回
redo log:MySQL事务背后的幕后英雄
后端
2024-02-15 02:29:12
MySQL8事务篇2-MySQL事务日志redo log
本文将聚焦于MySQL事务日志redo log,深入剖析其日志格式、组成、刷盘策略以及写入过程,并探索redo log file日志文件格式和checkpoint机制。
redo log的日志格式,组成和刷盘策略
redo log的日志格式采用循环写的方式,由多个大小相同的日志块组成,每个日志块的存储内容包括:
- 日志块头:记录日志块的基本信息,如日志块编号、大小等。
- 事务日志:记录事务操作的信息,包括事务ID、操作类型、修改的数据等。
- 日志校验和:用来校验日志块的完整性,防止数据损坏。
redo log的刷盘策略有多种,包括:
- 同步刷盘 :每个日志块在写入内存后立即写入磁盘,是最安全可靠的刷盘策略,但性能较低。
- 异步刷盘 :每个日志块在写入内存后,先写入操作系统文件系统缓存,再由操作系统负责将缓存中的数据写入磁盘。这种策略性能较高,但存在数据丢失的风险。
- 半同步刷盘 :介于同步刷盘和异步刷盘之间,每个日志块在写入内存后,先写入操作系统文件系统缓存,但要求操作系统在将缓存中的数据写入磁盘之前,必须收到至少一台从库的确认,然后再将数据从缓存中删除。这种策略兼顾了性能和数据安全性。
redo log 的写入过程
redo log的写入过程如下:
- 事务开始时,系统会在redo log中创建一个新的日志块,并记录事务ID和事务开始时间。
- 事务执行过程中,每当对数据进行修改时,系统都会在redo log中记录一条日志,包括事务ID、操作类型、修改的数据等。
- 事务提交时,系统会在redo log中记录一条事务提交日志,并释放事务占用的资源。
- 当redo log中的日志块写满时,系统会创建一个新的日志块,并将后续的日志写入新的日志块中。
- 当redo log中的日志块被覆盖时,系统会将该日志块从redo log中删除。
redo log file 日志文件的格式和checkpoint机制
redo log file日志文件由多个大小相同的日志块组成,每个日志块存储的内容与redo log中的日志块相同。
为了提高redo log的性能,MySQL采用了checkpoint机制。checkpoint机制会定期将redo log中已经提交的事务日志从内存刷新到磁盘,并删除这些日志。这样可以减少redo log中的日志数量,提高redo log的写入效率。
结语
redo log是MySQL事务日志的重要组成部分,它记录了事务操作的信息,保证了事务的原子性、一致性、隔离性和持久性。理解redo log的日志格式、组成、刷盘策略和写入过程,对于理解MySQL事务处理机制非常重要。