mysql数据库InnoDB存储引擎Log漫游(3)

2019-06-24  本文已影响0人  快点给我想个名

原文地址http://www.zhdba.com/mysqlops/2012/04/06/innodb-log3/

Checkpoint

理论上来说,如果MySQL数据库InnoDB存储引擎的buffer足够大,就不需要将数据本身持久化。将全部的redo log重新执行一遍
就可以恢复所有的数据。但是随着时间的积累,Redo Log会变的很大很大。如果每次都从第一条记
录开始恢复,恢复的过程就会很慢,从而无法被容忍。为了减少恢复的时间,就引入了Checkpoint机制。

- 脏页(dirty page)
如果一个数据页在内存中修改了,但是还没有刷新到磁盘。这个数据页就称作脏页。

- 日志顺序号(Log Sequence Number)
LSN是日志空间中每条日志的结束点,用字节偏移量来表示。在Checkpoint和恢复时使用。

- 原理
假设在某个时间点,所有的脏页都被刷新到了磁盘上.这个时间点之前的所有Redo Log就不需要重
做了。系统记录下这个时间点时redo log的结尾位置作为checkpoint. 在进行恢复时,从这个
checkpoint的位置开始即可。Checkpoint点之前的日志也就不再需要了,可以被删除掉。为了
更好的利用日志空间,InnoDB以环形缓存(circular buffer)的方式来使用日志空间。

sharpcheckpoint1.jpg

05 – 缓存池(Buffer Pool)
学习到这里,我更倾向于说这是一个”Redo+Undo+Buffer”的模式。为了提搞IO性能,脏页缓存在buffer中,
Redo log也要先缓存在内存中,doublewrite也有内存buffer. Buffer pool在这个模式中是至关重要的。

06 – Mini-Transaction(MTR)
前面提到Redo Log将数据的操作细分到了页面级别。但是有些在多个页面上的操作是逻辑上不可分裂的。
InnoDB中用Mini-Transaction来表示这些不可再细分的逻辑操作。

上一篇 下一篇

猜你喜欢

热点阅读