MySQL InnoDB 數據寫入原理

一、活動介紹

  • 介紹一下 MySQL InnoDB 存儲引擎是如何將數據一步一步最終寫入到磁盤上的。

  • MYSQL數據庫至理名言:  日誌先行(日誌先落盤)

  • INNODB的三大特性:插入緩存,雙寫,自適應hash

 

二、上正菜​ 

mysql在具體執行 insert 之前會做各種驗證,這裏就跳過了,直接介紹引擎層的處理過程

  • a. 開始執行事務,獲取相關鎖

  • b. 記錄undolog (保證事務原子性,先寫undolog回滾日誌,邏輯日誌,記錄在ibdata1文件, 理解爲修改數據之前備份在別的地方去, 也用於實現MVCC)

  • c. 記錄redolog (保證事務持久性,INNODB記錄redo log 重做日誌,redolog爲物理日誌,對應文件爲ib_logfileN,redolog是順序循環寫,相對高效。與b同時在事務進行中持續寫)

  • d. 修改數據,修改後的數據進入innodb buffer pool (未提交,屬於髒事務)

  • e. 事務提交。提交完成並不代表數據不會丟失,這與上面配置的參數有關。同時,寫binlog,爲了保證master和slave的數據一致性和崩潰恢復,就必須保證binlog和INNODB redolog的一致性(binlog在server層,而redo log 在存儲引擎層),MySQL引入二階段提交,傳說中的2PC。

以上,不管是redolog,undolog,binlog,都是先寫日誌緩衝,再寫磁盤,對應參數innodb_flush_log_at_trx_commit ,sync_binlog。

  • f. 數據落盤,與參數配置有關,配置的嚴格 雙1模式下d步驟就可落盤,一般高性能模式是會延遲落盤,不會立即落盤。

技師上圖

三、高營養價值

  1. MVCC

  2. INNODB 事務日誌

  3. INNODB 三大特性

  4. 核心參數配置

  5. 2PC

四、飯後甜點

附官方參考手冊:分佈式事務   https://dev.mysql.com/doc/refman/8.0/en/xa.html

附愛可生社區參考文檔: MySQL insert 語句的磁盤寫入之旅 https://my.oschina.net/actiontechoss/blog/3226494/print

附大佬 ·double write· 文檔:https://www.cnblogs.com/andy6/p/6938704.html

五、更多文檔

附官方參考手冊:分佈式事務   https://dev.mysql.com/doc/refman/8.0/en/xa.html

附愛可生社區參考文檔: MySQL insert 語句的磁盤寫入之旅 https://my.oschina.net/actiontechoss/blog/3226494/print

附大佬 ·double write· 文檔:https://www.cnblogs.com/andy6/p/6938704.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章