首頁 > 軟體

MySQL三大紀錄檔(binlog、redo log和undo log)圖文詳解

2023-01-20 14:02:36

1.redo log

redo log概述

redo log(重做紀錄檔)是InnoDB儲存引擎獨有的,它讓MySQL擁有了崩潰恢復能力。

比如 MySQL 範例掛了或宕機了,重啟時,InnoDB儲存引擎會使用redo log恢復資料,保證資料的永續性與完整性。

MySQL 中資料是以頁為單位,你查詢一條記錄,會從硬碟把一頁的資料載入出來,載入出來的資料叫資料頁,會放入到 Buffer Pool 中。

後續的查詢都是先從 Buffer Pool 中找,沒有命中再去硬碟載入,減少硬碟 IO 開銷,提升效能。

更新表資料的時候,也是如此,發現 Buffer Pool 裡存在要更新的資料,就直接在 Buffer Pool 裡更新。

然後會把“在某個資料頁上做了什麼修改”記錄到重做紀錄檔快取(redo log buffer)裡,接著刷盤到 redo log 檔案裡。

刷盤時機

InnoDB 儲存引擎為 redo log 的刷盤策略提供了 innodb_flush_log_at_trx_commit 引數,它支援三種策略:

  • 0 :設定為 0 的時候,表示每次事務提交時不進行刷盤操作
  • 1 :設定為 1 的時候,表示每次事務提交時都將進行刷盤操作 (預設值)
  • 2 :設定為 2 的時候,表示每次事務提交時都只把 redo log buffer 內容寫入 page cache

另外,InnoDB 儲存引擎有一個後臺執行緒,每隔1 秒,就會把 redo log buffer 中的內容寫到檔案系統快取(page cache),然後呼叫 fsync 刷盤。

也就是說,一個沒有提交事務的 redo log 記錄,也可能會刷盤


IT145.com E-mail:sddin#qq.com