[TOC]算法
参考: sql
涉及到的知识面有 Buffer Pool & Redo Log & Undo Log & BinLog & CheckPoint & 脏页。.net
若是每次数据更改操做都直接操做到磁盘上的话,当操做数量多起来的话,那么这些操做将变的很慢。为了提升操做之间的并发度,Mysql设计了缓存系统。设计
缓存池。当数据完成更改后,不会立马同步到磁盘上,而是先放到缓存池中。日志
为了防止系统掉电后,缓存池中的数据不丢失,即保证事务的持久性,特此记录一份数据修改以后的Log。例如,事务将 a 从 1 -> 2,b 从 4 -> 3,那么 Log 会记录 a:2, b:3。code
innodb_log_write_ahead_size
;CHECKPOINT的做用就是记录上次刷入磁盘截止的位置,这样就不用每次都刷整个 redo log了。blog
脏页:redo log 上与磁盘数据不一样的部分叫脏页,即CHECKPOINT到本次文件光标位置所包含的数据。事务
按照redo log上记载的数据变化,将磁盘数据更新。本文讲的全部redo log 刷入磁盘都是指,刷入从CHECKPOINT开始到当前文件光标结束的数据。
刷入时机:
为了使事务在执行时能回滚到以前的状态,即保证事务的原子性,特此记录一份数据修改以前的Log。例如,事务将 a 从 1 -> 2,b 从 4 -> 3,那么 Log 会记录 a:1, b:4。
假设有A、B两个数据,值分别为1,2.
Binlog是只记录对数据试图产生变化的行为,即便你更新先后数据没变化,也会记录。
有两种记录方式: