mysql 日誌之redo log 重做日誌

2021-10-06 04:33:07 字數 1304 閱讀 3085

redo log ,具體來說,當有一條記錄需要更新的時候,innodb 引擎就會先把記錄寫到 redo log(檔案)裡面,並更新記憶體,這個時候更新就算完成了。同時,innodb 引擎會在適當的時候,將這個操作記錄更新到磁碟裡面,而這個更新往往是在系統比較空閒的時候做。mysql 裡經常說到的 wal 技術,wal 的全稱是 write-ahead logging,它的關鍵點就是先寫日誌,再寫磁碟。

redo log 寫入機制

事務在執行過程中,生成的 redo log 是要先寫到 redo log buffer 的。redo log的三種狀態

1  在 redo log buffer 中,物理上是在 mysql 程序記憶體中

2  寫到磁碟 (write),但是沒有持久化(fsync),物理上是在檔案系統的 page cache 裡面

3  持久化到磁碟,對應的是 hard disk

為了控制 redo log 的寫入策略,innodb 提供了 innodb_flush_log_at_trx_commit 引數,它有三種可能取值:

1、設定為 0 的時候,表示每次事務提交時都只是把 redo log 留在 redo log buffer 中 ;

2、設定為 1 的時候,表示每次事務提交時都將 redo log 直接持久化到磁碟;

3、設定為 2 的時候,表示每次事務提交時都只是把 redo log 寫到 page cache。

innodb 有乙個後台執行緒,每隔 1 秒,就會把 redo log buffer 中的日誌,呼叫 write 寫到檔案系統的 page cache,然後呼叫 fsync 持久化到磁碟。

redo log 設定

innodb_file_per_table = 1

innodb_buffer_pool_size = 2048m  #inodb資料快取

innodb_log_file_size = 512m ##一般來說,日誌檔案的全部大小,應該足夠容納伺服器乙個小時的活動內容

innodb_log_files_in_group =4  ##日誌檔案數。預設值為2

innodb_log_buffer_size = 8m   ##預設8mb,innodb在寫事務日誌的時候,為了提高效能,也是先將資訊寫入innofb log buffer中,當滿足innodb_flush_log_trx_commit引數所設定的相應條件(或者日誌緩衝區寫滿)之後,才會將日誌寫到檔案 (或者同步到磁碟)中

innodb_flush_log_at_trx_commit = 2  #表示每次事務提交時都只是把 redo log 寫到 page cache

MySQL 重做日誌 redo log 原理

redo log buffer redo log file 原理 目錄 1.重做日誌寫入過程圖 2.相關知識點彙總圖 3.redo log buffer 原理 4.redo log file 原理 1.重做日誌寫入過程 3.redo log buffer 原理 重做日誌緩衝 redo log buf...

重做日誌(redo log)

sql select group sequence status from v log group sequence status1 4 current 2 2 inactive 3 3 inactivedatabase altered.檢視日誌組中的成員 select group member f...

MySQL 8 0 redo log的深入解析

最開始了解mysql實現的時候,總聽到redo log,wal write ahead logging undo log這些關鍵詞,了解到redo log主要是用於實現事務的持久化的。為了進一步了解redo log,看了下相關 原始碼版本 mysql 8www.cppcns.com.0.12 這裡簡...