InnoDB引擎 事務永續性

2021-08-19 23:36:37 字數 1227 閱讀 1322

事務是指構成單一邏輯工作單元的操作的集合。資料庫系統維護事務的acid四個特性:

先從永續性說起。

保證永續性的策略就是write ahead logging。在事務提交之前,備份乙份事務的操作日誌在磁碟上,備份成功再允許事務成功提交。

innodb引擎中支援永續性的是redo log,redo log寫入過程如圖所示:

redo log的寫入為順序迴圈寫入。預設有兩個redo log檔案,innodb順序寫其中乙個,寫滿之後,再順序寫另外乙個日誌檔案,再回過頭來寫第乙個…迴圈往復。

既然重複利用redo log檔案,就涉及到確定哪些日誌可以被覆寫的問題,innodb引擎利用checkpoint技術來解決這個問題。

在深入理解innodb引擎–儲存結構與檔案中介紹了lsn記錄了頁的版本,checkpoint用以表示已經重新整理至磁碟的頁的版本,在checkpoint之前的事務已經持久化在磁碟上,redo log可以被覆寫重用。

在事務的執行過程中,由於快取的緣故,有些頁被修改後(髒頁)並沒有立刻被重新整理至磁碟,但是事務提交成功了(redo log已經記錄完畢)。

那麼什麼時候重新整理快取中的髒頁到磁碟呢?主要有以下三種情況:

redo log檔案大小問題

redo log 不能太大也不能太小:redo log日誌太大,將會導致大量髒頁駐留記憶體而未被重新整理至磁碟,系統故障恢復時將需要更多的時間。redo log日誌太小,日誌檔案切換頻率和發生checkpoint的頻率隨著公升高,導致效能抖動。

redo log寫入「深度」

innodb_flush_log_at_trx_commit引數控制著redo log的寫入策略:

引數值commit寫入位置

效能與可靠性

0記憶體裡的redo log buffer,最終等待master thread重新整理回磁碟

效能最好,可靠性最差,資料庫系統故障則發生事務丟失

1磁碟,呼叫fsync直接重新整理至磁碟

效能最差,可靠性最好,不會發生事務丟失

2磁碟快取,最終等待宿主機檔案系統重新整理回磁碟

效能中等,可靠性中等,資料庫系統故障但是宿主機作業系統不故障則不會發生事務丟失

mysql技術內幕 innodb儲存引擎 第2版

SQLServer 延遲事務永續性

sql server 2014新功能 延遲事務永續性 delayed transaction durability sql server事務提交預設是完全永續性的 full durable 從sql server 2014開始,增加了新的功能延遲事務永續性,使得事務提交可設定為延時永續性的 dela...

SQLServer 延遲事務永續性

sql server 2014新功能 延遲事務永續性 delayed transaction durability sql server事務提交預設是完全永續性的 full durable 從sql server 2014開始,增加了新的功能延遲事務永續性,使得事務提交可設定為延時永續性的 dela...

MySQL InnoDB 引擎的永續性與效能

mysql 事務的 acid 特性中,d 代表永續性 durability 在使用 innodb 引擎時,當返回客戶端乙個成功完成事務的確認時,innodb 就會保證資料的一致性,即使該資料在此時還沒有寫入磁碟,因為 innodb 引擎的重做日誌已經連續地記錄了已完成的事務。innodb 不是在事務...