Mysql redo log日志 | 青训营笔记

165 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第8篇笔记

redo log(物理日志\重做日志)

redo log是InnoDB存储引擎层的日志,又称重做日志文件,是物理日志。redo log记录数据修改后新数据的备份、冗杂的undo log、未提交的事务和回滚的事务,数据缓存到内存中,只是在事务提交前将redo log持久化到磁盘

redo log 可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,保证了事务的持久性

当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log中,并更新内存。之后,InnoDB引擎会在适当的时候,将这个操作更新到磁盘中,这个更新是在系统比较空闲的时候做,他的关键点是先写日志,再写磁盘。

**redo log**日志大小是固定的,若空间满了以后会回到头部停止更新,先加载一些数据到磁盘让出文件空间,之后继续写入


物理日志:因为mysql数据最终是保存在数据页中的,物理日志记录的就是数据页变更

为了保证Redo Log能够有比较好的IO性能,InnoDB 的 Redo Log的设计有以下几个特点:

  • 尽量保持Redo Log存储在一段连续的空间上。因此在系统第一次启动时就会将日志文件的空间完全分配。以顺序追加的方式记录Redo Log,通过顺序IO来改善性能。

  • redo log包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。日志并不是直接写入文件的,而是先写入日志缓冲,当需要将日志刷新到磁盘时(如事务提交),将许多日志一起写入磁盘.

  • 并发的事务共享Redo Log的存储空间,它们的Redo Log按语句的执行顺序**,依次交替的记录在一起,以减少日志占用的空间。所以,当一个事务将Redo Log写入磁盘时,也会将其他未提交**的事务的日志写入磁盘。

  • Redo Log上只进行顺序追加的操作,当一个事务需要回滚时,它的Redo Log记录也不会从Redo Log中删除掉。


注意

一般在事务提交之前会将redo log持久化到磁盘中,以此来保证持久性