InnoDB存储引擎——事务原理

1.什么是事务

InnoDB存储引擎——事务原理_第1张图片
InnoDB存储引擎——事务原理_第2张图片

2.redo log

InnoDB存储引擎——事务原理_第3张图片
脏页是指缓冲区的数据与磁盘中的数据不一致时的状态。脏页的数据并不是实时刷新的,而是一段时间之后通过后台线程把脏页的数据刷线到磁盘,假如说脏页的数据在往磁盘中刷新的时候出错了,内存中的数据没有刷新到磁盘当中,事务已经提交,且已经告诉用户事务已经提交成功了,但是最终在脏页刷新的时候失败了,那么这时持久性就没有得到保障。
InnoDB存储引擎——事务原理_第4张图片

当redo log出现之后 它的流程是什么样的呢??

当我们对缓冲区的数据进行了增删改之后,它首先会把增删改的数据记录到redo log buffer当中,在redo log buffer当中就会记录数据页的物理变化。当事务提交的时候,重做日志也就是redo log buffer会把数据页变化文件(log日志文件)直接刷新到磁盘当中,持久化保存到磁盘文件当中。过段时间之后在进行脏页刷新的时候出错了,可以通过redo log进行恢复。这就是redo log的作用,redo log当中就记录了当此数据的变化。

redo log主要就是脏页刷新数据到磁盘发生错误的时候,恢复数据用的,为什么每次提交不直接将buffer pool当中的脏页数据直接刷新到磁盘 而是刷新redo log中的日志文件??

这是由于每次提交的时候 不需要redo log,直接将buffer pool中的文件刷新到磁盘当中,可以这么做但是存在严重的性能问题,因为在事务当中进行一组操作的时候,通常会操作很多条记录,这是都是在随机地操作数据页,这个时候就会存在大量的随机磁盘io,性能较差,如果在操作中用到redo log,事务提交后先把redo log 日志文件刷新到磁盘当中,由于它是log日志文件,日志文件都是追加的,它此时是顺序磁盘io,它的性能高于随机磁盘io,这种机制叫做WAL(write-ahead-logging)先写日志。

如果脏页中的数据顺利地刷新到磁盘当中了,redo log所记录的数据变更就不需要了,所以每个一段时间就会清理redo log日志。
InnoDB存储引擎——事务原理_第5张图片

3.undo log

InnoDB存储引擎——事务原理_第6张图片

你可能感兴趣的:(MySQL知识,数据库,mysql,架构)