发现自己的知识点有点散,今天就把它们连接起来,好好总结一下。
一、undo log、redo log、binlog的定义和对比
定义和作用
所在架构层级
日志形式
所在文件和默认名称,组织结构
是否缓存,如何缓存
写文件方式
undo log
回滚日志,在事务执行的过程中操作任何数据之前先将数据备份到undolog中。
事务失败时可根据undo log进行回滚。
用来保证事务的一致性。
还可以用来实现多版本并发控制MVCC。
InnoDB引擎层
逻辑日志,以行的形式进行记录。
共享表空间文件,ibdata0/ibdata1。
undo只是该文件的的一部分(rollback segment),文件由页组成,每一页又由一行行的数据组成,undo相对有自己的固定页,会循环覆盖。
Rollback segment,一共有128个,分别从resg slot0 - resg slot127,每一个resg slot,也就是每一个回滚段,内部由1024个undo segment组成。
是,innodb_buffer_pool缓冲池中有undo页
尽量顺序写。
回滚,实际做的是与之前相反的工作,比如INSERT需要的是DELETE,而DELETE需要的是INSERT。
执行相反的UPDATE,将修改前的行放回去。
回滚操作写入磁盘时为随机写。
redo log
重做日志,在事务执行的过程