相关文章 | 地址 |
---|---|
初探 InnoDB 体系架构 | 初探 InnoDB 体系架构 |
InnoDB 对于数据的 update 和 delete 改变了 缓存池中页的记录,那么此时缓存和页的数据比磁盘的数据要新, 数据库需要将新版本的页从缓存池刷新到磁盘中。如果说每做一次更新和删除操作,就把缓存中页的数据刷新到磁盘,那么开销非常大,而且如果把缓存池中页的新版本杀心到磁盘是发生了宕机,那么数据就不能恢复了。为了避免这种情况发生,当前事务数据库都采用了 Wrte Ahead Log 策略,即当事务提交时,先写重做日志,再修改页。当数据库宕机时,可以通过重做日志来完成数据的恢复。
Checkpoint 的职责 将缓存池中的脏页刷回磁盘 重点在于,每次刷新多少也到磁盘,每次从哪里取脏页,以及什么时候触发 Checkpoint
当数据库宕机时 , 数据库不需要重做所有的日志,因为CheckPoint 之前的页已经刷回磁盘,只需对checkpoint后的重做日志进行恢复。这样就大大缩短了恢复时间。
对于 重做日志来说,没有必要让他无限增大,重做日志的设计都是循环使用的,如果数据库恢复不需要这部分日志,那么他就是可以被覆盖重用。若此时当前重做日志还需要被使用,不可以被覆盖,那么必须强制产生 Checkpoint,将缓冲池中的页至少刷新到当前重做日志的位置。