暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL日志 - Undo和Redo日志

426
MySQL日志历史文章,
MySQL日志 - Undo回滚日志的介绍
MySQL日志 - Relay Log中继日志的介绍
MySQL日志 - Redo Log重做日志
MySQL日志 - Error Log错误日志

MySQL日志 - General Query Log

参考徐老师的这篇文章MySQL架构——MySQL如何使用磁盘空间二》,对Undo和Redo日志的机制和原理,再做一些补充和了解。

Redo日志用于在数据保存为数据文件前存储InnoDB的变更操作,可以优化InnoDB的数据写入及崩溃恢复。InnoDB回放Redo日志文件里的操作以确保事务的一致性,包括在崩溃之前为写入数据文件的数据操作。

用户可以通过"innodb_log_files_in_group"和"innodb_log_file_size"选项配置日子的数量和大小。默认情况下,日志保存在数据路径下,名称为"ib_logfile0"和"ib_logfile1"。如果日志文件不完整(错误的大小或损坏),InnoDB将启动失败,如果日志文件不存在,在服务器启动期间将创建新的文件。日志文件合计最大为512G(innodb_log_file_size*innodb_log_file_in_group),推荐使用2个文件。注意,如果使用过大的Redo日志文件,会增加OS层面的I/O缓冲内存使用率,使用多个小文件客户减少内存的使用率。

当发生更改的事件时,Redo日志记录事件,之后将其写入数据文件。以上图为例,三个增删改的事件先记录Redo日志,之后innoDB将这些更改写入数据文件。

Undo日志存储事务更改前、未发生变化的数据,innoDB可以利用它访问之前版本的数据。默认情况下,Undo日志保存在Undo表空间,用于MVCC及回滚。当需要回滚事务,或者其他的事务需要查看之前的数据时,innoDB从Undo日志里找回数据。Undo日志分为Insert undo缓冲和Update undo缓冲。

当InnoDB写入Redo日志后,它将这些更改写入数据库的页,在这个操作之前,它将获取一个未经修改的数据库页的副本,并将其保存到Undo日志。

默认情况下,Undo日志使用两个Undo表空间,其保存在数据路径下,用户可以通过更改"innodb_undo_directory"选项更改其位置。Undo日志与普通的数据使用不同的I/O模式,该模式更适用于SSD。

临时表的Undo日志与其他的表不同,由于临时表不使用Redo日志,临时表的Undo日志仅用于服务器运行时的回滚,临时表的Undo日志存储在全局临时表空间的回滚片段(iptmp1),这种特殊类型的Undo日志具有性能优势,因为它能够减少Redo日志记录时带来的I/O开销。

注意:Redo日志和Undo日志与MySQL其他日志不同(通用日志、二进制日志、慢查询日志等等),用户无法使用标准的工具探测里面的内容。


如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,




近期更新的文章:
MySQL字段拼接的三个函数
MySQL日志 - Undo回滚日志的介绍
MySQL创建用户提示1396
MySQL日志 - Relay Log中继日志的介绍
常见的行业认证和资质清单介绍

近期的热文:
推荐一篇Oracle RAC Cache Fusion的经典论文
"红警"游戏开源代码带给我们的震撼

文章分类和索引:
公众号1200篇文章分类和索引

文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论