mysql相关问题 WAL机制、crash safe如何实现、redo log作用

WAL 的全称是 Write-Ahead Logging,它的关键点是,先写日志,再写磁盘。
WAL的机制在redo log的使用场景,充分展现。
具体说来,当执行一条sql时,过程如下:

  1. Innodb引擎会把数据先插入redo log(也是写入磁盘,顺序写入,比较快)当中,并更新内存(db buffer),这个时候更新就算完成了。
  • 此时,内存(db buffer)中的数据和磁盘数据(data file)对应的数据不同,我们认为内存中的数据是脏数据(即:脏页)
  • db buffer再选择合适的时机将数据持久化到data file中。
  • 这种顺序可以保证在需要故障恢复时恢复最后的修改操作
  • 先持久化日志的策略叫做Write Ahead Log,即预写日志。
  1. Redo log 的示意图如下


    redo log示意图
  • write pos 是当前记录的位置
  • checkpoint 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件
  • 有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe

参考文献:

  1. https://www.letiantian.me/2014-06-18-db-undo-redo-checkpoint/
  2. https://time.geekbang.org/column/article/68633

你可能感兴趣的:(mysql相关问题 WAL机制、crash safe如何实现、redo log作用)