MySQL Innodb日誌機制深入分析

來源:互聯網
上載者:User

1.1. Log & Checkpoint

Innodb的交易記錄是指Redo log,簡稱Log,儲存在記錄檔ib_logfile*裡面。Innodb還有另外一個日誌Undo log,但Undo log是存放在共用資料表空間裡面的(ibdata*檔案)。

 

由於Log和Checkpoint緊密相關,因此將這兩部分合在一起分析。

名詞解釋:LSN,記錄序號,Innodb的記錄序號是一個64位的整型。

 

1.1.1. 寫入機制1.1.1.1. Log寫入 

LSN實際上對應記錄檔的位移量,新的LSN=舊的LSN + 寫入的日誌大小。舉例如下:

LSN=1G,記錄檔大小總共為600M,本次寫入512位元組,則實際寫入操作為:

l 求出位移量:由於LSN數值遠大於記錄檔大小,因此通過取餘方式,得到位移量為400M;

l 寫入日誌:找到位移400M的位置,寫入512位元組日誌內容,下一個事務的LSN就是1000000512;

 

1.1.1.2. Checkpoint寫入 

Innodb實現了Fuzzy Checkpoint的機制,每次取到最老的髒頁,然後確保此髒頁對應的LSN之前的LSN都已經寫入記錄檔,再將此髒頁的LSN作為Checkpoint點記錄到記錄檔,意思就是“此LSN之前的LSN對應的日誌和資料都已經寫入磁碟檔案”。恢複資料檔案的時候,Innodb掃描記錄檔,當發現LSN小於Checkpoint對應的LSN,就認為恢複已經完成。

Checkpoint寫入的位置在記錄檔開頭固定的位移量處,即每次寫Checkpoint都覆蓋之前的Checkpoint資訊。

 

 

1.1.2. 管理機制 

由於Checkpoint和日誌緊密相關,將日誌和Checkpoint一起說明,詳細的實現機制如下:

 

 

如所示,Innodb的一條交易記錄共經曆4個階段:

l 建立階段:事務建立一條日誌;

l 日誌刷盤:日誌寫入到磁碟上的記錄檔;

l 資料刷盤:日誌對應的髒頁資料寫入到磁碟上的資料檔案;

l 寫CKP:日誌被當作Checkpoint寫入記錄檔;

 

 

對應這4個階段,系統記錄了4個日誌相關的資訊,www.bkjia.com用於其它各種處理使用:

l Log sequence number(LSN1):當前系統LSN最大值,新的交易記錄LSN將在此基礎上產生(LSN1+新日誌的大小);

l Log flushed up to(LSN2):當前已經寫入記錄檔的LSN;

l Oldest modified data log(LSN3):當前最舊的髒頁資料對應的LSN,寫Checkpoint的時候直接將此LSN寫入到記錄檔;

l Last checkpoint at(LSN4):當前已經寫入Checkpoint的LSN;

 

 

對於系統來說,以上4個LSN是遞減的,即: LSN1>=LSN2>=LSN3>=LSN4.

 

具體的範例如下(使用show innodb status /G命令查看,Oldest modified data log沒有顯示):

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.