MySQL 为什么需要 redo log?
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
MySQL中的redo log 简介
本文旨在介绍MySQL中的redo log,其背景是为了更好地理解两阶段提交。讨论了redo log的来源和作用,以及它在MySQL的架构中的位置。
1. 谁的 redo log
MySQL包含Server层和存储引擎层,其中binlog属于Server层,而redo log是存储引擎InnoDB特有的。两种日志存在是因为历史和技术原因。
2. buffer pool
buffer pool是MySQL用于减少磁盘IO操作的缓存区域,它缓存索引和表数据,提高了数据访问速度。buffer pool的默认大小为128MB,但可以根据服务器容量调整。
3. change buffer
change buffer用于提高增删改的效率,它记录了内存中的更改并在读取时合并到buffer pool中。这减少了写操作的磁盘IO,从而提升了性能。change buffer的大小默认为缓冲池的25%,但可配置。
4. redo log 的诞生
WAL(Write-Ahead Logging)机制允许将写操作先记录在日志上,随后再适时更新到磁盘。这避免了高峰期的磁盘IO,提升了性能。redo log分为易失的redo log buffer和持久的redo log file。
4.1 redo log buffer
redo log buffer是先写到内存的日志,它在某些时机(如事务提交、内存使用量达到一定程度、MySQL关闭等)会持久化到redo log file。通过innodb_flush_log_at_trx_commit参数控制,保证了数据的持久性和一致性。
4.2 redo log 落盘
落盘的数据通常直接来自于buffer pool的脏页,而不是redo log。redo log记录的是物理日志,即数据页的修改,而不是完整的数据页信息。
文章最后指出,redo log的详细内容将在后续文章中继续探讨。
想要了解更多内容?