InnoDB文檔筆記(二)—— Redo Log

接着上篇,如今開始看看各個模塊,文檔上的內容有點弱, 詳細的能夠看看,《MySQL技術內幕(InnoDB存儲引擎)》這本書的第七章!html

Redo Log是基於磁盤的數據結構,用來恢復因爲未完成事務形成的數據修改。默認狀況下,Redo Log在ib_logfile0和ib_logfile1這個兩個文件中,m默認大小爲5MB。事務的執行,會向redo log中記錄相應數據頁的修改。mysql

Redo Log用保證事務的持久性。Redo Log一般是物理日誌,記錄的是數據頁的物理修改。sql

1、相關參數

  • innodb_log_files_in_group
  • innodb_log_file_size

redo log size = innodb_log_files_in_group * innodb_log_file_size數據庫

2、簡介

Redo Log:redo log buffer 、redo log file數據結構

Redo Log持久化:redo log buffer -> os buffer -> redo log filespa

InnoDB記錄了數據文件的物理修改,而且保證日誌先行,即WAL(write-ahead logging)。日誌

LNS(log sequence number)記錄日誌序號。htm

Redo Log以順序的方式寫入文件,寫滿時則回溯到第一個文件,進行覆蓋。事務

Redo Log在存儲引擎層產生,是物理格式日誌;bin log在數據庫的上層產生,是邏輯日誌,不管什麼存儲引擎都會產生。內存

3、Redo Log Flush策略

經過innodb_flush_log_at_trx_commit控制,值有0、一、2,默認爲1

  • 0:事務commit時,log Buffer的日誌不會寫入os buffer,而是每秒寫入os buffer,並刷入log file。
  • 1:事務commit時候,log buffer的日誌會寫入os buffer並刷入log file。
  • 2:事務commit時,log buffer的日誌寫入os buffer,而後每秒os buffer輸入log file。

4、Log Block

參考Log Block,這篇文章的圖描述的很清楚。

redo log基於頁存儲,默認大小爲16kb,由多個log block組成,一個log block大小爲512字節。

5、Redo Log什麼時候刷入磁盤

  • 發出commit動做時,具體看 Redo Log Flush策略
  • innodb_flush_log_at_timeout控制,默認每一秒一次
  • log buffer使用內存超過一半
  • checkpoint

6、LSN(Log Sequence Number)

參考LSN

7、Optimizing InnoDB Redo Logging

讓redo log files足夠大,但不能太大

增長log buffer大小

配置innodb_log_write_ahead_size配置選項,以免「讀寫」。

兩個參考文章:

相關文章
相關標籤/搜索