[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是隻記錄對數據試圖產生變化的行爲,即便你更新先後數據沒變化,也會記錄。
有兩種記錄方式: