扫码阅读
手机扫码阅读

MySQL 为什么需要 redo log?

72 2024-11-28

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文: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的详细内容将在后续文章中继续探讨。

这是一个HTML格式的摘要,概括了文章的主要内容,并保持了原文的结构。

想要了解更多内容?

查看原文:MySQL 为什么需要 redo log?
文章来源:
江南一点雨
扫码关注公众号