宋利兵 mysql_MySQL数据库InnoDB存储引擎Log漫游(3)

做者:宋利兵html

来源:MySQL代码研究(mysqlcode)mysql

0、导读

本文重点介绍了InnoDB的checkpoint和Buffer Pool管理算法

04 – Checkpointsql

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

在了解checkpoint原理以前,先看两个名词:缓存

- 脏页(dirty page)

若是一个数据页在内存中修改了,可是尚未刷新到磁盘。这个数据页就称做脏页。并发

- 日志顺序号(Log Sequence Number)

LSN是日志空间中每条日志的结束点,用字节偏移量来表示。在Checkpoint和恢复时使用。异步

- Checkpoint 原理

假设在某个时间点,全部的脏页都被刷新到了磁盘上.这个时间点以前的全部Redo Log就不须要重作了。系统记录下这个时间点时redo log的结尾位置做为checkpoint. 在进行恢复时,从这个checkpoint的位置开始便可。Checkpoint点以前的日志也就再也不须要了,能够被清除掉。为了更好的利用日志空间,InnoDB并不会删除之前的Redo Log文件. InnoDB用几个Redo Log文件首尾相连,构建了一个环形缓存(circular buffer)的日志空间。函数

- 有了Checkpoint以后的Recovery性能

A. 首先要按期的将Checkpoint写入磁盘中某个地方.

B. 作Recovery时,从磁盘中读出Checkpoint.

C. 根据Checkpoint中的LSN找到Redo Log相应的位置,开始执行Redo Log.

- Sharp Checkpoint

对于繁忙的系统来讲,不多会出现这样的的一个时间点。为了能创造出这样一个时间点,最简单的办法就是:

A. 在某个时间开始中止一切更新操做

B. 全部的脏页被刷新到磁盘

C. 记录当前Redo Log的结尾位置到磁盘上.

D. Checkpoint结束,继续更新操做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值